我有以下代码,超时设置为60秒
p = subprocess.Popen(['ocamlopt', file],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
timeout=TIMEOUT_ECAML,
)
我不明白为什么我得到
的错误信息__init__() got an unexpected keyword argument 'timeout'
我已经研究了这个以前的帖子与相同的错误,但其他用户使用subprocess.call()
,而我使用subprocess.Popen()
,所以我很困惑为什么会发生这种情况。
Popen
类在其签名中没有timeout
参数:
https://docs.python.org/2/library/subprocess.html subprocess.Popen
您可以在实际通信时传递timeout
参数:
https://docs.python.org/3/library/subprocess.html subprocess.Popen.communicate
原因相同。没有timeout参数
Popen
的所有有效参数列表:https://docs.python.org/3/library/subprocess.html#subprocess.Popen
其他用户使用
subprocess.call()
,而我使用subprocess.Popen()
,所以我很困惑为什么会发生这种情况。
call()
阻塞,直到命令结束或超时。Popen()
不等待命令完成;它立即返回,因此它不接受timeout
参数。您可以将timeout
传递给wait()
或communicate()
方法,这些方法等待进程完成或超时发生。