首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理Python中的管道和输出?

如何处理Python中的管道和输出?
EN

Stack Overflow用户
提问于 2013-10-19 03:45:09
回答 2查看 1.4K关注 0票数 0

我试图在python脚本中执行这个命令:

代码语言:javascript
复制
avprobeCommand = "avprobe -of json -show_streams {0} | grep '\"duration\"' | sed -n 1p | sed 's/ //g'".format(hiOutput)
output = subprocess.check_output([avprobeCommand])

我不断地得到:

代码语言:javascript
复制
    Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 552, in __bootstrap_inner
    self.run()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 505, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/Users/jmakaila/Documents/Development/Present/Web/video_dev/present-live-transcoder/Transcoder.py", line 60, in transcode
    output = subprocess.check_output([avprobeCommand])
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 537, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1228, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

我已经尝试过拆分args,但是我一直收到一个-of json -show_streams部件的错误,记录在案,如下所示:

代码语言:javascript
复制
subprocess.check_output(["avprobe", "-of json", "-show_streams", "{0}".format(hiOutput)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-19 03:47:17

将命令作为字符串传递,并传递shell=True

代码语言:javascript
复制
import pipes
import subprocess

avprobeCommand = """avprobe -of json -show_streams {0} | grep '"duration"' | sed -n 1p | sed 's/ //g'""".format(pipes.quote(hiOutput))
output = subprocess.check_output(avprobeCommand, shell=True)

UPDATE:参数应该使用pipes.quote转义。(如果使用Python shlex.quote 3.3+,则使用3.3+)。

票数 1
EN

Stack Overflow用户

发布于 2013-10-24 11:36:58

在您的例子中,您可以将后处理移到Python中:

代码语言:javascript
复制
import json
from subprocess import check_output as qx

data = json.loads(qx(["avprobe", "-of", "json", "-show_streams", hiOutput]))
result = data["duration"]         # grep '"duration"'
             .partition("\n")[0]  # sed -n 1p
             .replace(" ", "")    # sed 's/ //g'

有关更一般的情况,请参见How do I use subprocess.Popen to connect multiple processes by pipes?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19462117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档