在Python中如何只打印shell命令结果的第一行stdout
在下面这个for循环中,我打印了安装的程序的版本号。
for program in sub3_required_programs: try: version = subprocess.call([program, '-i']) print version + '\n' except: exit
但是我其实只想要第一行,也就是包含版本号的那一行。我该怎么做才能只打印第一行呢?
4 个回答
2
使用 str.split('\n')
这种方法的问题在于,不同的操作系统对换行符的定义可能不一样。换句话说,在某些系统上,换行的方式可能和其他系统不一样。所以,可能用这种方法不太好。你可以试试其他的做法:
print version.splitlines()[0]
4
你可以这样做:
print version.split("\n")[0]
这样可以从输出中获取第一行(通过换行符来分割)。
0
现在的打印输出是什么?除非你用的Python版本有不同的表现,否则看起来调用的返回状态是唯一被赋值给version的东西。
运行命令并带上参数。等待命令完成,然后返回 returncode属性。
我敢打赌,subprocess.call就是问题所在,它把输出打印到了标准输出(STDOUT)。即使你没有那个打印语句,你仍然会看到subprocess调用的所有输出,因为这个方法的工作方式就是这样。
要获取实际的输出,你可能需要做一些更像这样的事情:
lines = subprocess.Popen([program, '-i'], stdout=subprocess.PIPE).communicate()[0]
print lines.splitlines()[0] + '\n'
communicate
调用会返回一个元组(stdoutdata, stderrdata)
。你可以在文档中了解更多信息。其他的内容应该都很容易理解。