簡體   English   中英

如何避免 Python 掛在 subprocess.run() 上

[英]How can I avoid Python hanging on subprocess.run()

我正在創建一個小的自動化腳本來與游戲進行交互。 游戲很容易崩潰,但以不可預測的方式(30 分鍾到 3 小時后,取決於游戲中發生的情況)。 正因為如此,我在下面寫了一個小腳本,它是理想的終止程序,終止檢查崩潰並提供重新啟動的崩潰監控客戶端,然后重新啟動游戲並繼續。 問題是我從來沒有達到過 subprocess.run()

它再次啟動游戲,但不允許在此之后運行任何代碼。

import psutil
import time
import subprocess

def main():
    '''Process kill function'''    
    for proc in psutil.process_iter():
        # check whether the process name matches
        # print(proc.name())
        if any(procstr in proc.name() for procstr in\
            ['GameName.exe']):
            print(f'Killing {proc.name()}')
            proc.kill()
            time.sleep(5)
    for proc in psutil.process_iter():
        # check whether the process name matches
        # print(proc.name())
        if any(procstr in proc.name() for procstr in\
            ['GameCrashMonitor.exe']):
            print(f'Killing {proc.name()}')
            proc.kill()
    time.sleep(10)
    subprocess.run(r'PathToGame.exe')
    print(time.time())

if __name__ == "__main__":
    main()

這個程序成功進入subprocess.call,再次啟動游戲,然后python就掛了。 我無法控制 ipython 上的 c 來阻止它。 我使用 Spyder,它甚至使我的任務欄上的 spyder 圖標出錯並消失。

嘗試更換subprocess.run()variable = subprocess.Popen([r'PathToGame.exe']) https://docs.python.org/3/library/subprocess.html說subprocess.run()等待命令完成,然后返回一個 CompletedProcess 實例。 你的命令沒有完成。 此外,您可以將超時參數傳遞給 run() 但默認情況下,它是None ,並且不會超時,如果您仍想使用.run()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM