簡體   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