Python subprocess 读取行?
我想从使用os.popen转到使用subprocess.popen,这是用户指南推荐的做法。现在我遇到的问题是,我找不到让readlines()正常工作的办法。
之前我可以这样做:
list = os.popen('ls -l').readlines()
但是现在我不能这样做了:
list = subprocess.Popen(['ls','-l']).readlines()
5 个回答
13
在这个链接中,讨论的是如何进行一个系统调用,并且让这个调用的输出结果以字符串的形式返回。简单来说,就是你可以让计算机执行某个命令,然后把这个命令的结果以文本的方式拿到手。这样你就可以在程序中使用这个结果,而不是仅仅在屏幕上显示出来。
lines = subprocess.check_output(['ls', '-l']).splitlines()
39
ls = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE)
out = ls.stdout.readlines()
for ln in ls.stdout:
# whatever
或者,如果你想逐行读取(也许另一个进程比 ls
更耗资源):
32
使用 subprocess.Popen
时,可以用 communicate
来读写数据:
out, err = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE).communicate()
然后,你可以随时用 splitlines()
来把进程输出的字符串分割成多行。
out = out.splitlines()