我希望在問題上得到一些幫助。我有一個無限循環,我需要運行,我需要從命令行隨機更新一組變量(本例中爲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