python循环子进程.按行检查输出



我需要对命令的输出进行循环。我以为我会用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
'foon'
'barn'

子进程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

对于Python3,先前的答案不会立即起作用,因为bytes是由check_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)

Python3:

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

最新更新