Python子进程readlines()?

jdb*_*org 14 python subprocess

所以我试图按照用户指南的建议从os.popen转移到subprocess.popen.我遇到的唯一麻烦是我似乎无法找到使readlines()工作的方法.

所以我曾经能做到

list = os.popen('ls -l').readlines()
Run Code Online (Sandbox Code Playgroud)

但我不能这样做

list = subprocess.Popen(['ls','-l']).readlines()
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 32

ls = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE)
out = ls.stdout.readlines()
Run Code Online (Sandbox Code Playgroud)

或者,如果你想逐行阅读(可能其他过程比其他过程更密集ls):

for ln in ls.stdout:
    # whatever
Run Code Online (Sandbox Code Playgroud)

  • 这种方法优于已接受的答案,因为它允许人们在子过程产生输出时读取输出. (3认同)

agf*_*agf 26

subprocess.Popen,用于communicate读写数据:

out, err = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE).communicate() 
Run Code Online (Sandbox Code Playgroud)

那么你可以随时从拆分的过程串stdoutsplitlines().

out = out.splitlines()
Run Code Online (Sandbox Code Playgroud)

  • `communic`的问题在于你一次获得所有的输出,在非递归的`ls'的情况下不太可能是一个问题.通过使用`stdout`成员,您可以逐行阅读(想想`find`). (4认同)