【发布时间】: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