python - 当脚本在循环内持续运行时更改变量值
问题描述
当脚本在循环中运行时是否可以更改值?
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
但我不知道它是如何工作的。
解决方案
有很多方法可以控制正在运行的程序,但大致而言,所有这些方法都涉及在做一些工作和检查输入之间交替。一个非常简单的方法是这样的:
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。
推荐阅读
- c# - C# API OAuth 消费
- javascript - RN perf 问题:尽早绑定,不要在渲染中创建函数
- python - Python pandas 根据上面某些行的条件在数据框中创建一个新行
- javascript - 我想将输入值发送到 node.js 中的其他页面
- azure-devops - 在 Azure DevOps Pipelines 中部署构建时,$(Build.ArtifactStagingDirectory) 变量的值会发生变化
- arrays - 如何迭代填充了文件和目录路径的文件以检查它们是什么
- objective-c - 如何使用 gtest 测试异步回调
- r - 如果单元只有一个观察值,则删除
- r - 在 R 中转换日期时间列时出现 NA 错误
- c# - 如何构建一个在主窗体打开时应该关闭的可移动启动窗体?