我希望在问题上得到一些帮助。我有一个无限循环,我需要运行,我需要从命令行随机更新一组变量(本例中为x)。有没有办法做到这一点?在无限循环中更新Python中的参数
例如:
x = 0
while True:
x = x + 1
if x < 30:
do something
和我需要更新从周期性
我希望在问题上得到一些帮助。我有一个无限循环,我需要运行,我需要从命令行随机更新一组变量(本例中为x)。有没有办法做到这一点?在无限循环中更新Python中的参数
例如:
x = 0
while True:
x = x + 1
if x < 30:
do something
和我需要更新从周期性
一旦程序正在运行,并且循环内的命令行X的值,那里有外部无法修改传递的参数纳入该计划。你将要做的就是运行这个程序,并运行一个独立的程序来发送消息到这个程序中,同时运行它来修改状态。在你的无限循环内,你将需要有代码来寻找并接收该消息并生效。有很多方法可以执行此通信。最基本的版本是定期轮询一个文件,在无限循环中进行这么多迭代。如果文件内容发生了变化,在阅读和那X的新值,然后给变量在命令行中改变你只要运行如下命令
echo "NewValue" > file.txt
文件将在这里工作,但像管会更合适。
对我来说,这听起来像一个更好的方式来实现,这将是使用一个线程,而不是一个无限循环和使用
notify()
方法指导时在命令行的数据来更新
这里是一个很好的参考,让你开始:
这是相当的hackish,但也有点可爱:
import code
import signal
import time
def signal_handler(signal, frame):
code.interact(local=globals())
signal.signal(signal.SIGINT, signal_handler)
x=0
while True:
x = x + 1
time.sleep(0.01)
if x < 30:
print(x,'do something')
当你按下Ctrl-C时,你被放到python解释器中。 在那里你可以键入Python语句,如
x=10
按Ctrl-D恢复执行。
我的解决方案使用线程和基本的锁定机制。
from threading import Thread,Lock
lock = Lock()
def read():
global x
x = 0
while True:
lock.acquire()
try:
x = x + 1
finally:
lock.release()
if x < 30:
#do something
def update():
global x
while True:
cmd_input = int(raw_input())
lock.acquire()
try:
x = cmd_input
finally:
lock.release()
if __name__=='__main__':
update_t = Thread(target=update,args=())
read_t = Thread(target=read,args=())
update_t.start()
read_t.start()
+1,有趣的解决方案... – 2010-05-15 18:07:22