【问题标题】:python subprocess store each line of output in a listpython子进程将每一行输出存储在一个列表中
【发布时间】:2013-03-25 01:50:57
【问题描述】:

我正在尝试将文件夹中视频文件的尺寸存储到列表中。

#!/usr/bin/env python

# src_dimensions.py

# requires mediainfo package

import subprocess

proc = subprocess.Popen('mediainfo --Inform="Video;%Width%x%Height%\n" /home/saad/Videos/*.*', shell=True, stdout=subprocess.PIPE)

for line in iter(proc.stdout.readline,''):
   print line

这个程序的结果输出是:

384x288640x480480x350352x162480x360640x360480x360384x288240x180320x240480x360384x288346x26

当我在终端中运行mediainfo 命令时,每个视频维度都在换行符上:

384x288
640x480
480x350
352x162
480x360

我希望将每个维度作为单独的项目存储在列表中。我正在尝试迭代 stdout,但它不起作用。

更新 #1

import subprocess
dim = []
proc = subprocess.Popen('mediainfo --Inform="Video;%Width%x%Height%\\n" /home/saad/Videos/*.*', shell=True, stdout=subprocess.PIPE)
for line in iter(proc.stdout.readline, ''):
   dim.append(line.rstrip('\n'))
print dim

感谢@Chakib 的建议,这似乎给了我列表。

['440x360', '320x240', '480x360', '320x240', '480x360', '320x240', '320x240', '400x224', '']

【问题讨论】:

  • 你可以在你的 Popen 调用中像这样\\n 逃避\n
  • 与 \\n 一起使用,但输出在项目之间有一个额外的换行符,例如340X480 \n 480X240
  • 如果我的命令看起来像itemsListEXT = subprocess.check_output(cmd, shell=True,executable="/bin/bash").splitlines() return itemsListEXT,我会怎么做
  • 回答了我自己的问题。这很容易(只需将 splitlines() 更改为 split():itemsListEXT = subprocess.check_output(cmd,shell=True,executable="/bin/bash").split() return itemsListEXT

标签: python subprocess line-by-line


【解决方案1】:

\这是你想要的吗?

#!/usr/bin/env python
# src_dimensions.py
# requires mediainfo package
import subprocess, glob
globpattern = 'path/to/*.*'
cmd = ['mediainfo', '--Inform=Video;%Width%x%Height%\\n']
cmd.extend(glob.glob(globpattern))
proc = subprocess.Popen(cmd,stdout=subprocess.PIPE)
outputlines = filter(lambda x:len(x)>0,(line.strip() for line in proc.stdout))
print outputlines

【讨论】:

  • 返回:['480x360480x350320x240384x288640x4801280x720450x360480x3601280x720']。我要['480x360', '480x350'...]
  • 听起来像是 cmdline 参数中的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2018-09-11
  • 2011-10-29
  • 1970-01-01
  • 2016-03-05
  • 2021-11-06
相关资源
最近更新 更多