簡體   English   中英

Python“子進程”卡住了

[英]Python 'subprocess' gets stuck

我使用“子流程”重復工作,如下所示。

import subprocess

arg_list = ['a', 'b', 'c', 'd']
for arg in arg_list:
    proc = subprocess.Popen(['some_app.exe', arg])
    proc.communicate()

大多數運行成功終止,但有時應用程序需要單擊“確定”按鈕。 然后腳本卡在那里。 工作時間根據參數('a','b',...)變化很大,因此我無法設置適當的超時。

有什么方法可以獲取進程的狀態(工作或等待按鈕點擊)? 如果我可以告訴應用程序正在等待點擊,那么可以終止該過程。

是一個類似的問題,但還沒有解決方案。

有什么方法可以獲取進程的狀態(工作或等待按鈕點擊)? 如果我可以告訴應用程序正在等待點擊,那么可以終止該過程。

不是我知道的。 您只能使用proc.poll()檢查進程的運行狀態。 但是, proc.communicate()是阻塞的,所以你必須在另一個線程中輪詢它。

如何解決?

  1. 超時后殺死

請注意, proc.communicate可以獲得timeout參數,因此盡管A 工作時間根據參數變化很大,但如果您決定計算它 - 您可以傳遞它並且subprocess進程將在超時后為您終止進程。

  1. 垃圾郵件“進入”

我建議您在這里查看如何發送鍵盤事件。 您可能只想添加另一個線程,每 N 秒將輸入發送到您的進程......

  1. 可選(沒有檢查) psutil.status

嘗試使用psutil.status() 狀態選項來檢查您的進程是否可能是psutil.STATUS_SLEEPING 不確定在 Windows 中是如何工作的。 如果您在 Linux 上運行,我假設您的進程,如果等待鍵盤鍵,將是psutil.STATUS_IDLEpsutil.STATUS_WAITING

暫無
暫無

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

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