我需要读取python脚本中的shell命令输出,并用每一行填充一个列表:
问题:如果我将命令输出保存为变量,则循环循环逐字符读取它。
#!/usr/bin/python
import subprocess
CMD = "ls -la"
output = subprocess.check_output(CMD, shell=True)
list = []
for line in output:
list.append(line)
print list坏输出: 't','o','t','a','l',‘','5',.
解决方案:作为一项工作,我将comand输出定向到一个文件,然后逐行读取:
#!/usr/bin/python
import subprocess
CMD = "ls -la > tmp"
subprocess.call(CMD, shell=True)
list = []
f = open("tmp", "r")
for line in f:
list.append(line)
print list好输出‘总计52\n',’drwxrwxr-x3 ajn 4096火星11 17:52。
问题:如何使用第一种方法(没有文件操作,全部在程序中)与第二种方法的结果?
发布于 2021-11-10 11:04:10
不要使用proc.stdout.readlines()。它在返回之前读取所有输出。您需要使用proc.stdout。
这是yy.py
import subprocess
cmd = ["bash", "./yy.sh"]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for line in proc.stdout:
print( line )这是yy.sh
for a in 1 2 3 4 5 6 7 8 9 0; do
echo "hi $a !!!"
sleep 1
done当您运行yy.py时,您将逐行获得输出。
如果使用proc.stdout.readlines(),则等待10秒并获得所有输出。
https://stackoverflow.com/questions/28993712
复制相似问题