gpt4 book ai didi

python - 如何在Python中使用子进程跳过错误消息弹出窗口

转载 作者:行者123 更新时间:2023-12-01 00:33:54 27 4
gpt4 key购买 nike

我在Python中使用subprocess来调用WINDOWS上的外部程序。我用ThreadPool来控制进程,这样我就可以限制它同时最多有6个进程,并且当一个进程完成时,新的进程就会不断地开始。

代码如下:

### some codes above

### Code of Subprocess Part

from multiprocessing.pool import ThreadPool as Pool

def FAST_worker(file):
p = subprocess.Popen([r'E:/pyworkspace/FAST/FAST_RV_W64.exe', file],
cwd = r'E:/pyworkspace/FAST/',
shell = True)
p.wait()

# List of *.in filenames
FAST_in_pathname_li = [
'334.in',
'893.in',
'9527.in',
...
'114514.in',
'1919810.in',
]

# Limit max 6 processes at same time
with Pool(processes = 6) as pool:
for result in pool.imap_unordered(FAST_worker, FAST_in_pathname_li):
pass

### some codes below

外部程序意外终止并显示错误消息弹出窗口时,我遇到了问题。虽然其他5个流程仍然继续进行,但整个进度最终会卡在“子流程部分”而无法继续进行。 (除非我来到办公 table 前手动单击“关闭程序”)

我想知道的是如何避免弹出窗口并使整个脚本过程继续进行,比如绕过错误消息什么的,而不是手动点击,以避免浪费时间。

最佳答案

由于我们对 FAST_worker 正在调用的程序了解不够,我假设您已经检查过不存在任何“错误终止”或“安静”模式方便在脚本中使用。

我的两分钱:也许您可以在工作线程执行上设置超时,以便在一定延迟后自动终止卡住的进程。

基于提供的代码片段构建here ,这是一个草稿:

from threading import Timer

def FAST_worker(file, timeout_sec):
def kill_proc():
"""called by the Timer thread upon expiration"""
p.kill()
# maybe add task to list of failed task, for tracability

p = subprocess.Popen([r'E:/pyworkspace/FAST/FAST_RV_W64.exe', file],
cwd = r'E:/pyworkspace/FAST/',
shell = True)
# setup timer to kill the process after a timeout
timer = Timer(timeout_sec, kill_proc)
try:
timer.start()
stdout, stderr = p.wait()
finally:
timer.cancel()

请注意,Python 中也有 GUI 自动化库可以为您执行单击操作,但这可能会使编程更加繁琐:

关于python - 如何在Python中使用子进程跳过错误消息弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57956209/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com