在python中如何只打印由shell命令产生的第一行stdout

时间:2011-08-16 19:44:51

标签: python

在以下for循环中,我打印已安装程序的版本号

 for program in sub3_required_programs:
        try:
            version = subprocess.call([program, '-i'])                                                                     
            print version + '\n'
        except:
            exit

但我实际上只想要第一行有版本号。如何将打印限制为仅第一行

4 个答案:

答案 0 :(得分:4)

你可以这样做:

print version.split("\n")[0]

从输出中获取第一行(在换行符上拆分)。

答案 1 :(得分:2)

str.split('\n')方法的问题在于换行符可能因平台而异。你可能会有更好的运气:

print version.splitlines()[0]

答案 2 :(得分:0)

将字符串拆分为换行符,并仅使用结果列表的第一个元素:

 print version.split('\n')[0]

答案 3 :(得分:0)

当前的打印输出是什么?除非您运行的Python行为版本不同,否则看起来调用的返回状态是唯一分配给版本的内容。

  

使用参数运行命令。等待命令完成,然后返回   returncode属性。

- docstring for subprocess.call

我敢打赌subprocess.call是罪魁祸首,将它的输出打印到STDOUT。即使您没有该print语句,由于方法的工作方式,您仍会看到子进程调用的所有输出。

要获取实际输出,您可能希望执行更像

的操作
lines = subprocess.Popen([program, '-i'], stdout=subprocess.PIPE).communicate()[0]
print lines.splitlines()[0] + '\n'

communicate调用返回元组(stdoutdata, stderrdata)。您可以在docs中详细了解相关信息。其他一切都应该是不言自明的。