我找到了有关 subprocess.check_output() 的文档,但找不到带有参数的文档,而且文档不是很深入。我正在使用 Python 3(但我正在尝试通过 Python 3 运行 Python 2 文件)
我正在尝试运行此命令: python py2.py -i test.txt
-i 是 argparse 的位置参数,test.txt 是 -i 是什么,py2.py 是要运行的文件
我尝试了很多(非工作)变体,包括: py2output = subprocess.check_output([str('python py2.py '),'-i', 'test.txt'])
py2output = subprocess.check_output([str('python'),'py2.py','-i', test.txt'])
原文由 JOHANNES_NYÅTT 发布,翻译遵循 CC BY-SA 4.0 许可协议
正确答案(使用 Python 2.7 及更高版本,因为 当时引入了
check_output()
)是:为了演示,这是我的两个程序:
py2.py:
py3.py:
运行它:
以下是您的每个版本的问题:
First,
str('python py2.py')
is exactly the same thing as'python py2.py'
taking astr
, and callingstr
to convert it to anstr
。这使得代码更难阅读、更长,甚至更慢,而没有增加任何好处。更严重的是,
python py2.py
不能是单个参数,除非您实际上正在尝试运行名为/usr/bin/python\ py2.py
的程序。你不是;你正在尝试运行/usr/bin/python
第一个参数py2.py
。因此,您需要使它们成为列表中的独立元素。您的第二个版本修复了该问题,但您在
'
之前缺少test.txt'
。这应该给你一个SyntaxError
,可能是说EOL while scanning string literal
。同时,我不确定您是如何找到文档的,但找不到任何带参数的示例。第一个例子是:
这会调用带有附加参数
"echo"
命令"Hello World!"
。还:
我很确定
-i
不是 位置参数,而是可选参数。否则,后半句就没有意义了。