【问题标题】:python __init__() got an unexpected keyword argument 'timeout'python __init__() 得到了一个意外的关键字参数“超时”
【发布时间】:2016-10-28 04:44:14
【问题描述】:

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

【问题讨论】:

    标签: python python-3.x timeout subprocess


    【解决方案1】:

    Popen 类的签名中没有 timeout 参数:

    https://docs.python.org/2/library/subprocess.html#subprocess.Popen

    您可以在实际通信时传递timeout 参数:

    https://docs.python.org/3/library/subprocess.html#subprocess.Popen.communicate

    【讨论】:

    • subprocess.run() 在 Python 3.5 中引入,具有超时参数,现在是首选接口。
    【解决方案2】:

    同样的原因。没有超时参数。

    Popen 的所有有效参数列表:https://docs.python.org/3/library/subprocess.html#subprocess.Popen

    【讨论】:

      【解决方案3】:

      另一个用户使用subprocess.call(),而我使用subprocess.Popen(),所以我很困惑为什么会这样。

      call() 阻塞,直到命令结束或超时发生。 Popen() 不等待命令完成;它立即返回,因此它不接受timeout 参数。您可以将 timeout 传递给 wait()communicate() 方法,这些方法会等待进程完成或发生超时。

      【讨论】:

        猜你喜欢
        • 2013-12-18
        • 2015-06-08
        • 2019-01-13
        • 2021-03-17
        • 2013-05-05
        • 2016-06-05
        • 2020-08-20
        • 2021-09-20
        • 2014-05-12
        相关资源
        最近更新 更多