我在Python中调用一个shell脚本fom,它产生多个子进程。如果两分钟后我不想结束它的进程。在
有什么办法我能做到吗子流程.运行还是我得回去用波本?由于run是阻塞的,我不能保存pid到某个地方,以便在一个额外的命令中杀死孩子。一个简短的代码示例:
try:
subprocess.run(["my_shell_script"], stderr=subprocess.STDOUT, timeout=120)
except subprocess.TimeoutExpired:
print("Timeout during execution")
Tags:
这个问题以bug的形式报告给Python开发人员。当stderr或stdout被重定向时,似乎会发生这种情况。 下面是@Tanu代码的更正确版本。在
Popen不接受
timeout
作为参数。它必须传递给communicate
。 在posixoss上,terminate
比kill
更温和,因为它降低了创建僵尸进程的风险。在引用文件:
如果不想使用Popen(),则不必使用。模块中的其他函数,如.call(),.Popen()。在
有三个“文件”流:stdin用于输入,stdout和stderr用于输出。应用程序决定在哪里写什么;通常将错误和诊断信息写入stderr,其余信息写入stdout。要捕获这些输出的输出,请指定子流程.管道参数,以便将“流”重定向到程序中。在
要在超时后终止子进程,请执行以下操作:
相关问题 更多 >
编程相关推荐