当脚本在循环内运行时,是否可以更改值?
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
的执行方式,但是我不知道它的工作原理。
答案 0 :(得分:1)
您必须使用inputValue
函数内的global
语句将changeValue
声明为全局变量,以便将该函数内对该变量的赋值语句应用于{{1 }}作为全局变量;否则,分配给inputValue
作为inputValue
的局部变量,而不是:
changeValue
请注意,通常不建议将全局变量用于只读的应用程序范围的配置。您应该考虑将全局变量设置为局部变量,并将其作为函数参数和返回值传递,例如:
def changeValue(value):
global inputValue
inputValue = value
答案 1 :(得分:1)
有很多方法可以控制正在运行的程序,但首先,所有方法都涉及在做一些工作和检查输入之间的交替。一种非常简单的方法是这样的:
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。