我有以下代码,超时设置为60秒
p = subprocess.Popen(['ocamlopt', file], \
stdout=subprocess.PIPE, \
stderr=subprocess.PIPE, \
timeout=TIMEOUT_ECAML, \
)
我不明白为什么我收到
的错误消息__init__() got an unexpected keyword argument 'timeout'
我调查this previous post时出现了同样的错误,但是当我使用subprocess.call()
时,其他用户使用了subprocess.Popen()
,所以我很困惑为什么会发生这种情况。
答案 0 :(得分:4)
Popen
类在其签名中没有timeout
参数:
https://docs.python.org/2/library/subprocess.html#subprocess.Popen
您可以在实际通信时传递timeout
参数:
https://docs.python.org/3/library/subprocess.html#subprocess.Popen.communicate
答案 1 :(得分:2)
同样的道理。没有超时参数。
Popen
的所有有效参数列表:https://docs.python.org/3/library/subprocess.html#subprocess.Popen
答案 2 :(得分:0)
当我使用
subprocess.call()
时,其他用户使用subprocess.Popen()
,所以我很困惑为什么会发生这种情况。
call()
阻塞,直到命令结束或超时发生。 Popen()
不等待命令完成;它立即返回,因此它不接受timeout
参数。您可以将timeout
传递给wait()
或communicate()
方法,这些方法会等到流程完成或超时发生。