当前位置: 首页 > 面试题库 >

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

史修明
2023-03-14
问题内容

我找到了有关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()
引入)是:

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不是 一个位置参数,但一个可选的参数。否则,句子的后半部分是没有意义的。



 类似资料:
  • 问题内容: 如何设置Selenium与Python一起使用?我只想用Python编写/导出脚本,然后运行它们。是否有任何资源?我尝试使用谷歌搜索,但是发现的东西要么是指Selenium(RC)的过时版本,要么是Python的过时版本。 问题答案: 您是说Selenium WebDriver吗?… 先决条件 :根据您的操作系统安装Python 使用以下命令安装 并在您的代码中使用此模块 您还可以根据

  • 问题内容: 我打算为Python安装一个虚拟环境,以使我的Python包分开。这样做的动机之一也是在我的机器上同时存在两个版本的Python(Ubuntu 14.04)。我有以下奇观: 应该以什么顺序安装Python,PIP和virtualenv?有关系吗? 完成后,如何在virtualenv下将两个python版本分开? 假设我正在处理单独的项目,是否建议将每个项目都保存在virtualenv创

  • 问题内容: 我正在尝试对正在编写的C python扩展进行memcheck,但是我无法设置valgrind与python一起使用。我真的很感谢一些建议。仅出于上下文考虑,这是Ubuntu 13.10,python 2.7.5+和valgrind 3.8.1。 根据我的建议,我做了以下工作。 1)下载了python源 2)应用了代码补丁,即“在Objects / obmalloc.c中取消注释Py_

  • 问题内容: 我刚刚在Windows 7计算机上安装了OpenCV。结果,我得到一个新目录: 在此目录中,我有两个文件:和。 然后,我尝试使用from Python。我执行以下操作: 结果,我收到以下错误消息: 我究竟做错了什么? 添加 至于有人建议在这里,我抄的内容的。它没有帮助。 加了2 我的环境变量具有以下值: 我需要改变什么吗?我需要添加一些东西吗? 加3 我认为我的问题很笼统:如何使用图书

  • 问题内容: 我在Vim和Python之间浪费了很多时间。我发现手动将其从Python复制粘贴到Vim,反之亦然,这太慢了。一个坏的例子是: %!python在xrange(25)中为我 打印6 * i \ n 您如何在Vim中直接进行此类调整? [解决了] [说明] 我需要Vim要做的事情,例如打印序列,算术…-我无法在Vim中做的事情。 [?] 有人可以详细说明这一点:“您的脚本可以从stdin

  • 问题内容: 我试图了解Python中的线程。我看过文档和示例,但坦率地说,许多示例过于复杂,我难以理解它们。 你如何清楚地显示为多线程而划分的任务? 问题答案: 我将在下面进行总结-最终仅是几行代码: 这是以下内容的多线程版本: 描述 Map是一个很棒的小功能,是轻松将并行性注入Python代码的关键。对于那些不熟悉的人来说,地图是从Lisp等功能语言中提炼出来的。它是将另一个功能映射到序列上的功