python循环遍历subprocess.check_output

时间:2013-08-14 23:37:48

标签: python-2.7 subprocess

我需要遍历命令的输出。我以为我会使用subprocess.check_output,现在我有两个问题。

这是一个文件:

foo
bar

这是我的python脚本:

import subprocess

for line in subprocess.check_output(['cat', 'foo']):
  print "%r" % line

这就是我得到的:

$ python subp.py 
'f'
'o'
'o'
'\n'
'b'
'a'
'r'
'\n'

我期待:

$ python subp.py
'foo\n'
'bar\n'

3 个答案:

答案 0 :(得分:13)

subprocess.check_output(['cat','foo'])返回一个字符串:“foo \ nbar”

因此,你的for循环遍历字符串,逐个打印每个字符。

以下内容应解决您的问题:

import subprocess

print subprocess.check_output(['cat', 'foo'])

你也可以这样做:

import subprocess

for line in subprocess.check_output(['cat', 'foo']).split('\n'):
    print "%r" % line

答案 1 :(得分:2)

Python3:

for line in subprocess.check_output(['cat', 'foo'], universal_newlines=True).split('\n'):
    print(line)

答案 2 :(得分:0)

使用Python3时,先前的答案无法立即生效,因为bytescheck_output返回

然后,您可以将字节解码为字符串或立即将它们拆分:

output = subprocess.check_output(['cat', 'foo'])

# splitting with byte-string
for line in output.split(b'\n'): 
    print(line)

# or decoding output to usual string
output_str = output.decode()
for line in output_str.split('\n'):
    print(line)