【问题标题】:Py3.5 subprocess.run unexpected kwarg 'stderr'Py3.5 subprocess.run 意外的 kwarg 'stderr'
【发布时间】:2016-05-07 13:44:41
【问题描述】:

我最近在一个 Django==1.9.1 项目中使用了 Python3.5 subprocess.run。该应用程序名为contest,感兴趣的两个文件是:

  • 竞赛/compat.py
  • 竞赛/utils.py

现在,compat.py 有:

import sys

if sys.version_info >= (3, 5):
    from subprocess import (run,
                            PIPE,
                            TimeoutExpired)
    print('V> 3.5')

else:

    from subprocess import (PIPE,
                            Popen,
                            TimeoutExpired,
                            CalledProcessError,
                            CompletedProcess)

    def run(*popenargs, input=None, timeout=None, check=False, **kwargs):
        '''Python3.5 subprocess code copied here'''
        return CompletedProcess(process.args, retcode, stdout, stderr)
    print('V NOT > 3.5')    

contest/utils.py 包含

from contest.compat import (run,
                            PIPE,
                            TimeoutExpired)

def some_function(*args, **kwargs):
        p = run(cmd,
                timeout=timeout,
                stderr=PIPE,
                stdout=PIPE,
                shell=True)

现在,当我使用 py3.5 自己运行这段代码时,它运行良好。当它在 Django 测试服务器(也在 py3.5 上)内部运行并且模型的方法调用此实用程序 some_function 时,会显示错误:

TypeError: run() got an unexpected keyword argument 'stderr'

为什么会这样?

【问题讨论】:

  • 显示完整的回溯。添加调试输出,以确保使用subprocess.run()(例如,添加help(run)

标签: python django subprocess python-import python-3.5


【解决方案1】:

由于我无法再重现此问题,我认为我的环境有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2018-11-21
    • 2020-02-15
    • 2017-08-02
    • 2018-12-16
    相关资源
    最近更新 更多