2012-02-12 70 views
4

在Python,我希望計算文件xh-2.txt的行數。裏面調用Python的系統命令,並得到它的輸出結果,而不是退出狀態

import subprocess 
subprocess.call("wc -l xh-2.txt",shell=True) 

但這是給我退出狀態,而不是命令的結果。

我知道命令print os.popen("wc -l xh-2.txt|cut -d' ' -f1").read()將完成這項工作, 但popen折舊,爲什麼使用read()?

什麼是調用系統命令裏面Python和獲得它的輸出結果,而不是退出狀態的最好方法?

+1

可能重複 http://stackoverflow.com/questions/2101426/parsing-a-stdout-in-python 使用POPEN而不是描述那裏。然後像頂級答案一樣閱讀標準輸出。 – 2012-02-12 10:11:27

回答

4

使用subprocess.check_output()

帶參數運行命令,並返回其輸出的字節串。

>>> import subprocess 
>>> import shlex 
>>> cmd = 'wc -l test.txt' 
>>> cm = shlex.split(cmd) 
>>> subprocess.check_output(cm,shell=True) 
'  1 test.txt\n' 
>>> 
+0

我只是不想在輸出中的文件名,奇怪的是python文檔沒有告訴我 – CodeFarmer 2012-02-12 11:00:42

+2

文件名將會出現在輸出中,因爲它在您的shell中獨立運行'wc -l test.txt'時出現。你可以這樣做'subprocess.check_output(cm).strip()。split('')[0]' – RanRag 2012-02-12 11:05:38

2

你可以使用子recipe

from subprocess import Popen, PIPE 
Popen("wc -l xh-2.txt", shell=True, stdout=PIPE).communicate()[0] 
+0

#method 1 os.system(「wc -l xh-2.txt | cut -d'' - F1> TMP 「) 打印打開(」 TMP」, 「R」)。readline的() #method 2 從子進口check_output STS = check_output( 「WC -l XH-2.txt」) 打印再。編譯(r'(\ d +)').search(sts).groups()[0] – CodeFarmer 2012-02-12 11:28:52

相關問題