首页 > 解决方案 > 当脚本在循环内持续运行时更改变量值

问题描述

当脚本在循环中运行时是否可以更改值?

import sys

inputValue = 120

def changeValue(value):
 inputValue = value

def main():
 if inputValue == 0:
  print 'Value is'+str(inputValue)

if __name__ == '__main__':
 while True:
  main()

我想改变执行python app.py调用函数的脚本,python app.py changeValue 23但我不知道它是如何工作的。

标签: pythonwhile-loop

解决方案


有很多方法可以控制正在运行的程序,但大致而言,所有这些方法都涉及在做一些工作和检查输入之间交替。一个非常简单的方法是这样的:

import string

value = 1

def checkChangeValue():
    newValue = input()
    if newValue.isdigit():
        global value
        value = int(newValue)

def main():
    print("Value is {}".format(value))

def loop():
    main()
    checkChangeValue()


if __name__ == '__main__':
    while True:
        loop()

这会一遍又一遍地运行main函数(“做一些工作”),然后checkChangeValue(“检查输入”)。但是,这可能不会满足您的要求,因为input()它会等待您输入内容并按 Enter,因此它会阻止main. 为了解决这个问题,您可以添加线程:

import string
import threading

value = 1

def checkChangeValue():
    global value
    while True:
        newValue = input()
        if newValue.isdigit():
            value = int(newValue)

def main():
    print("Value is {}".format(value))


if __name__ == '__main__':
    threading.Thread(target=checkChangeValue).start()
    while True:
       main()

根据您的需要,这些方法中的任何一种都可能有效。对于更复杂的方法,您可以查看pynput库,它允许您通过键盘或鼠标输入与程序进行交互。

还有许多其他不同的方法来控制正在运行的程序!您可以通过文件、管道、套接字、共享内存等与您的程序进行通信。这通常称为“进程间通信”或 IPC。


推荐阅读