python - 如何在 Python 中使用 subprocess.check_output()?

标签 python python-3.x python-2.x

我找到了关于 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'])

最佳答案

正确答案(使用 Python 2.7 及更高版本,因为 check_output() was introduced then )是:

py2output = subprocess.check_output(['python','py2.py','-i', 'test.txt'])

为了演示,这是我的两个程序:

py2.py:

import sys
print sys.argv

py3.py:

import subprocess
py2output = subprocess.check_output(['python', 'py2.py', '-i', 'test.txt'])
print('py2 said:', py2output)

运行它:

$ python3 py3.py
py2 said: b"['py2.py', '-i', 'test.txt']\n"

您的每个版本都有以下问题:

py2output = subprocess.check_output([str('python py2.py '),'-i', 'test.txt'])

首先,str('python py2.py')'python py2.py' 完全一样——你使用的是 str ,并调用 str 将其转换为 str。这使得代码更难阅读、更长,甚至更慢,而没有任何好处。

更严重的是,python py2.py 不能是单个参数,除非您实际上是在尝试运行名为 /usr/bin/python\py2 的程序.py。你不是;例如,您正尝试使用第一个参数 py2.py 运行 /usr/bin/python。所以,你需要让它们在列表中成为独立的元素。

您的第二个版本解决了这个问题,但是您在 test.txt' 之前缺少了 '。这应该会给你一个 SyntaxError,可能在扫描字符串文字时说 EOL

同时,我不确定您是如何找到文档的,但找不到任何带有参数的示例。第一个例子是:

>>> subprocess.check_output(["echo", "Hello World!"])
b'Hello World!\n'

这会调用 "echo" 命令并带有一个附加参数 "Hello World!"

还有:

-i is a positional argument for argparse, test.txt is what the -i is

我很确定 -i 不是 位置参数,而是可选参数。否则,后半句就没有意义了。

关于python - 如何在 Python 中使用 subprocess.check_output()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14078117/

相关文章:

python - 如何在字典中生成值的有序线性组合?

python - 如何使nii图像的深度相等?

python - 加入两个偏移量列表 ("offset zip"?)

python-3.x - 除非使用 sudo 运行,否则 Python 脚本不起作用

Python numpy uint64 在除法时转换为 float

python相等优先级

python - 需要帮助解决 Raspberry Pi 上 matplotlib 的性能问题

python-3.x - opencv 中的 ROI 坐标如何工作

python - 如何将 sha256 对象转换为整数并将其打包到 python 中的 bytearray?

c++ - Python 和 C++ 中的函数式编程