python __init __()得到了一个意外的关键字参数'timeout'

时间:2016-10-28 04:44:15

标签: python python-3.x timeout subprocess

我有以下代码,超时设置为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(),所以我很困惑为什么会发生这种情况。

3 个答案:

答案 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()方法,这些方法会等到流程完成或超时发生。