Py3.5 subprocess.run 意外的 kwarg 'stderr'

Posted

技术标签:

【中文标题】Py3.5 subprocess.run 意外的 kwarg \'stderr\'【英文标题】: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) 【参考方案1】:

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

【讨论】:

以上是关于Py3.5 subprocess.run 意外的 kwarg 'stderr'的主要内容,如果未能解决你的问题,请参考以下文章

如何抑制或捕获 subprocess.run() 的输出?

如何从 subprocess.run() 运行 pip install 命令 [重复]

subprocess.run 无法调用可执行文件 [重复]

subprocess.run()不返回预期的输出[关闭]

将 subprocess.run 输出重定向到 jupyter notebook 的

subprocess.run不抑制所有控制台输出