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 有:
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() 运行 pip install 命令 [重复]