日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python暂停和恢复游戏,暂停/恢复中间的python脚本

發布時間:2023/12/20 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python暂停和恢复游戏,暂停/恢复中间的python脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我可以在用戶中間暫停正在運行的python腳本(在Windows下),并在用戶決定時再次恢復嗎?

有一個主管理器程序生成,加載和運行其他python腳本(通過從控制臺調用python script.py)。我沒有GUI,用戶可以通過console進行交互。我希望我的主程序能夠響應用戶 正在運行的腳本的暫停/恢復命令。我應該定義一個線程嗎? 方法是什么?

編輯/更新:

假設我有一個帶有前端的小型python應用程序,它具有各種功能。 我有一個RUN命令在后臺運行python腳本。我想實現一個暫停正在運行的python腳本的PAUSE功能。 當用戶再次命令RUN時,python腳本應該恢復

跑步。

使用raw_input()或print()強制用戶發出命令。但在這種情況下,我們不知道用戶何時想要中斷/暫停/發出命令。因此通常的輸入/打印不可用。

你問了七個問題,只接受了一個答案。 請記住通過單擊最有用的旁邊的復選標記來接受您的問題的答案。 你應該為舊的,已回答的問題以及這個問題做到這一點。

我不能只選擇一個答案。我并不是說不喜歡花時間幫助我的人。

這不是很清楚,但你讓我很感興趣。 Lemme看看我是否能解決這個問題:你有一個管理一系列外部python腳本的控制臺程序,你想制作一組暫停和恢復腳本的命令。 我認為最好的方法是將這些腳本設置為生成器,因此它們會定期回退到管理器程序,然后可以查找用戶命令,然后告訴腳本繼續,假設用戶沒有暫停腳本。

不完全是,我在我的問題中添加了一個描述..

如果它是unix我會推薦信號,但這里有一個粗略的版本可以滿足您的要求。

import time

while True:

try:

time.sleep(1) ?# do something here

print '.',

except KeyboardInterrupt:

print '

Pausing... ?(Hit ENTER to continue, type quit to exit.)'

try:

response = raw_input()

if response == 'quit':

break

print 'Resuming...'

except KeyboardInterrupt:

print 'Resuming...'

continue

使用Ctrl + C暫停,然后按ENTER繼續。 Ctrl + Break可能會被用作嚴厲殺戮,但我沒有這個鍵盤上的鍵。

更強大的版本可以在管道/套接字甚至線程上使用select。

+1??雌饋碛悬chacky,但我認為更接近要求而不是我的要求。

是的,hacky但是完整的解決方案超出了我收集的SO問題的范圍。

如果不是time.sleep()我有一個冗長的python腳本,我不能使用這個技巧,因為每次我們恢復它從開始運行整個腳本。它不會暫停狀態存儲..

使用子進程運行它,然后使用stackoverflow.com/questions/1892356/暫停和恢復進程

您可以通過創建PAUSEFILE來進行簡單的解決方法。您的待暫停腳本可能會定期檢查此類文件的存在(或內容)。

用戶的PAUSE命令可以創建(或填充適當的內容)此類文件。

我在類似的情況下使用過這種方法,我希望能夠暫停我的Python腳本并在以后恢復它們。它們包含類似的東西

if os.path.isfile(PAUSEFILE):

raw_input('Remove ' + PAUSEFILE + ' and hit ENTER to continue')

在他們的主循環中。

它是討厭的,如果代碼真的依賴于它可能會被破壞,但對于用例,用戶隨機暫停,我想這無關緊要。

PAUSE命令只是touch $PAUSEFILE。

這不是花哨的,但它是一種簡單的方法來執行相當于低優先級的中斷。我希望我的腳本只在循環內的代碼塊結束時暫停(運行幾個小時),這是一種簡單的方法。

我不太了解你的方法,但每次用戶需要按Enter鍵繼續你應該使用的腳本:

input() #for python 3k

raw_input() #for python 2k

沒有將接收答案分配給變量。

請看我的更新。

好吧,你說用戶只使用控制臺進行交互,所以從那時起輸入的唯一方法是從input和raw_input到較低級別的stdin。如果您在tkinter中創建了一個gui應用程序,例如您可以從鼠標手勢,鍵盤按下等輸入。

是的,但問題不在于如何獲得輸入。如何將強制輸入鏈接到暫停和恢復。我不要求在我的代碼中輸入。我希望代碼對中斷采取行動并將其視為暫停和恢復。

我喜歡這個答案:簡單,有效。我在Python 3.5腳本中使用了它:輸入(" n t n n t t t t t t t t t t t t t t t t t t t t t t t n> n n n按Enter繼續 n

好吧,從我在搜索中看到的情況來看,即使使用線程,sys.stdin也會對你起作用,無論你怎么做(input(),甚至sys.stdin.read(),。readline()等等),因為他們阻止。

相反,將您的經理程序編寫為套接字服務器或類似的東西。

將腳本編寫為生成器,設計用于暫停執行(每次命中yield),并依次在每個腳本上依次調用next()。腳本完成時,您將收到StopIteration異常。

為了處理這些命令,編寫一個連接到管理器程序套接字并向其發送消息的第二個腳本,這將是用戶與之交互的控制臺界面(稍后,您甚至可以將其升級到GUI而不會在其他地方進行更改)。

服務器在腳本上運行下一次迭代之前選擇這些命令,如果用戶暫停腳本,則管理器程序只是不會在該腳本上調用next(),直到用戶告訴它再次運行。

我沒有對此進行測試,但我認為它比為外部腳本創建線程或子進程更好,然后嘗試暫停(以后再殺死)它們。

這真的是我的深度,但也許在后臺運行腳本并使用kill -stop和kill -cont暫停和繼續將工作(假設Linux)?

邏輯似乎很好,我不確定這是否可行和足夠快。我的腳本調用自定義庫函數,我不能使它們成為生成器,它們是非常冗長的函數...

嗯。然后你可能會遇到線程。生成器是Python可以暫停執行的唯一代碼對象,假設您可以暫停它們,只留下子進程。

真棒!但是,我沒有使用生成器,kill -stop job_id和kill -cont job_id完美地工作。

您可以在python中使用Pdb模塊。

雖然它是一個調試器,但在你的情況下它可以幫助你傳遞并繼續在代碼中有斷點的地方。

此外,當你恢復時,你可以看到它被暫停的位置以及變量的值是什么等。這將非常有幫助。

python調試器 - pdb

在Windows中,您可以暫停/恢復運行Python腳本。在CMD上或通過運行命令(Windows + R)鍵入resmon。找到您的Python腳本進程,然后右鍵單擊> Suspend Process。這將解鎖CPU使用率,但不能解鎖RAM。 ;)

我覺得這些反應太過苛刻了,同時也很有趣。

最好的方法是使用KeyboardInterrupt異常進行https://stackoverflow.com/a/7184165/2480481。

正如我注意到沒有人提到"使用調試器",我會這樣做。

使用pip install pdb安裝pdb,Python調試器。

按照這一點,通過Ctrl + c使您的腳本可以使用https://stackoverflow.com/a/39478157/2480481而不是退出它。

使用調試器(pdb)的主要好處是可以檢查變量,值等。這遠比暫停/繼續它更強大。

此外,您可以添加帶有pdb的Ipython接口,以便在崩潰時調試您的應用程序。請看:https://stackoverflow.com/a/14881323/2480481

如果從windows命令窗口啟動python腳本,則可以使用msvcrt.kbhit()作為非阻塞按鍵檢查,如下所示:

http://code.activestate.com/recipes/197140-key-press-detection-for-windows-text-only-console-/

kbhit()在Windows上"僅"出現。如果您在Linux上安裝它,它將從_kbhit加載termios時崩潰。如果您使用timeout (0)和getch()函數來檢測按鍵,它會更有用。我可能錯了,但是我在玩一些東西時就看到了??纯磛iget.com/articles/然后是pastebin.com/1VRdFdPQ,最后是pastebin.com/xyfm7LNa,這是我最后做的工作。你可以看到我在那個教程中找到相關問題的所有內容:gist.github.com/reagent/9743630。

您是否嘗試過顯而易見的打印提示然后從標準輸入讀取一行?這將暫停你的整個腳本。

你在原始問題中提到的內容不是很清楚,所以如果這不符合你的要求,你能解釋一下原因嗎?

請看我的updarte。

總結

以上是生活随笔為你收集整理的python暂停和恢复游戏,暂停/恢复中间的python脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。