当脚本在循环内连续运行时更改变量值

时间:2019-03-22 20:52:39

标签: python while-loop

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

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的执行方式,但是我不知道它的工作原理。

2 个答案:

答案 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。