繁体   English   中英

在 python 中,我如何仅打印由 shell 命令产生的标准输出的第一行

[英]In python how can i print only the first line of stdout which results from a shell command

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

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

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

你可以做:

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

从 output 获取第一行(以换行符分割)。

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

print version.splitlines()[0]

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

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

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

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

- subprocess.call的文档字符串

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

要获取实际的 output,您可能想做更多类似的事情

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

communicate调用返回元组(stdoutdata, stderrdata) 您可以在docs中阅读有关它的更多信息。 其他一切都应该是不言自明的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM