【发布时间】:2021-04-19 14:38:51
【问题描述】:
我正在构建一个应用程序,旨在在另一个软件中进行批量处理数据。为了自动控制其他软件,我使用 pyautoit,一切正常,除了由外部软件引起的应用程序错误,有时会发生。
为了处理这些情况,我建立了一个看门狗:
-
它使用子进程中的批量作业启动脚本
process = subprocess.Popen(['python', job_script, src_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) -
它使用winevt.EventLog模块监听系统事件
EventLog.Subscribe('System', 'Event/System[Level<=2]', handle_event) -
如果发生错误,它会关闭一切并重新启动脚本。
好的,如果发生系统错误事件,则应该以某种方式处理此事件,以便通知 supprocess。然后,此通知应导致子流程中的以下操作:
在子流程中有一个对象控制着一切并不断收集 生成的数据。为了不必从头开始整个工作,在重新启动脚本后,必须使用 pickle 转储该对象(这不是问题!)
从子进程内部监听系统事件不起作用。调用 subprocess.Popen() 时会导致连续循环。
所以,我的问题是如何从子进程内部订阅系统事件,或在父进程和子进程之间进行通信 - 意味着发送一条消息,如“嘿,发生错误”,在子进程中侦听,然后创建转储?
在这种情况下不允许发布任何代码,我真的很抱歉。但我希望(并且实际上认为)我的描述应该是可以理解的。我的问题是关于使用哪个模块以最佳方式完成此任务?
如果有人能指出我正确的方向,我会很高兴...
兄弟, 麦克风
【问题讨论】:
标签: python-3.x subprocess