我需要读取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。
问题:如何使用第一种方法(没有文件操作,全部在程序中)与第二种方法的结果?
发布于 2015-03-11 19:07:54
我并不是一个真正的蟒蛇,但这应该适用于你,而且看上去更清楚一些:
import subprocess
cmd = ["ls", "-la"]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for line in proc.stdout.readlines():
print line发布于 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秒并获得所有输出。
发布于 2015-03-11 17:47:31
你试过使用join吗?并在换行线上使用split (\n)。
#!/usr/bin/python
import subprocess
CMD = "ls -la"
output = subprocess.check_output(CMD, shell=True)
lst = []
for char in output:
lst.append(char)
print ''.join(lst).split('\n')基本上,将所有输出连接到一个字符串中,然后对换行符进行拆分,以创建单个输出的列表。另外,命名变量list也是错误的做法,因为这是Python中的一种类型。尝试使用lst或list1代替。
您还可以将其简化为:
#!/usr/bin/python
import subprocess
CMD = "ls -la"
output = subprocess.check_output(CMD, shell=True)
print output.split('\n')由于subprocess.check_output()的返回值是作为单个字符串的输出,因此不需要遍历每个字符,只需在字符串上使用split获取输出列表。
https://stackoverflow.com/questions/28993712
复制相似问题