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

时间:2016-01-29 17:59:42

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

我最近在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'

为什么会这样?

1 个答案:

答案 0 :(得分:0)

由于我再也无法重现这个问题,我认为我的环境出了问题。