您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

正确的答案(使用Python 2.7及更高版本,因为那时check_output()引入)是:

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。你不是 例如,您尝试/usr/bin/python使用第一个参数运行py2.py。因此,您需要使它们成为列表中单独的元素。

您的第二个版本已解决此问题,但您没有找到'以前的版本test.txt'。这可能会给你一个SyntaxError大概的答案EOL while scanning string literal

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

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

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

也:

-i是argparse的位置参数,test.txt是-i是

我敢肯定-i不是 一个位置参数,但一个可选的参数。否则,句子的后半部分是没有意义的。

python 2022/1/1 18:35:28 有220人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶