Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 python在子进程上循环。按行检查输出_Python 2.7_Subprocess - Fatal编程技术网

Python 2.7 python在子进程上循环。按行检查输出

Python 2.7 python在子进程上循环。按行检查输出,python-2.7,subprocess,Python 2.7,Subprocess,我需要循环一个命令的输出。我想我应该使用子流程。检查输出,现在我有两个问题 这里有一个文件: 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 'f

我需要循环一个命令的输出。我想我应该使用
子流程。检查输出,现在我有两个问题

这里有一个文件:

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'
subprocess.check_输出(['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,前面的答案不会立即起作用,因为
字节
检查输出返回

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

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)

蟒蛇3:

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

也可以使用或
p=
(…,stdout=subprocess.PIPE);对于p.stdout中的行:…
如果要处理文本(典型用法),添加
text=True
(或者,如果文本不是UTF-8,
encoding=whatever
)是更好的解决方案。