在Python中如何只打印shell命令结果的第一行stdout

2 投票
4 回答
12745 浏览
提问于 2025-04-16 23:43

在下面这个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的文档

我敢打赌,subprocess.call就是问题所在,它把输出打印到了标准输出(STDOUT)。即使你没有那个打印语句,你仍然会看到subprocess调用的所有输出,因为这个方法的工作方式就是这样。

要获取实际的输出,你可能需要做一些更像这样的事情:

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

communicate调用会返回一个元组(stdoutdata, stderrdata)。你可以在文档中了解更多信息。其他的内容应该都很容易理解。

撰写回答