是否可以捕獲wget和其他使用curses的命令行程序的輸出? 這是我現在所擁有的:從wget捕獲python輸出?
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=0)
for line in p.stdout:
print "a"
這對於具有簡單的輸出程序工作正常,但不是wget和使用詛咒其他程序。
是否可以捕獲wget和其他使用curses的命令行程序的輸出? 這是我現在所擁有的:從wget捕獲python輸出?
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=0)
for line in p.stdout:
print "a"
這對於具有簡單的輸出程序工作正常,但不是wget和使用詛咒其他程序。
我不認爲wget
正在使用curses。
通常當我想用wget
在腳本中我會使用-O -
選項,其輸出強制標準輸出。我懷疑你試圖捕獲文本,你通常看到您的控制檯上,當你運行它,這將是 stderr。
在命令行中,巨蟒外,只需運行一個命令,如:
wget -O - http://www.somesite.org/ > /tmp/wget.out 2> /tmp/wget.err
然後看兩個輸出文件。如果你在控制檯/終端上看到wget
的任何輸出,那麼你正在運行一些不同於我所見的命令。
如果我懷疑你確實對 stderr消息感興趣,那麼你有兩種選擇。
shell=True
您Popen()
參數stderr=subprocess.PIPE
您Popen()
參數前者是方便,如果你間沒有」 t使用 stdout無論如何(假設您使用 wget
來獲取數據並將其寫入文件)。在後一種情況下,您從 stderr文件選項讀取以獲取您的數據。
順便說一句:如果你真的需要捕捉詛咒數據...你可以嘗試使用標準 PTY模塊,但我不會建議。你會好得多獲取的pexpect
模塊來自:
,不要被年齡或版本編號被嚇跑了,它的工作原理上的Python 2.5和2.6以及2.4和2.3。
如何在wget完成之前打印它? – 2009-08-18 00:12:19
當然,如我在其他最近的答案中推薦的那樣,例如,請參閱http://stackoverflow.com/questions/1283061 – 2009-08-18 01:44:00
爲什麼要添加shell = True?它根本不方便 - 並且不必要地調用一個新的shell進程。 – nosklo 2009-08-18 03:27:18
我不認爲wget使用curses。它只是將其消息打印到stderr而不是stdout。 – 2009-08-17 22:57:26
對於wget的情況,您可能需要攔截(請參閱http://blog.doughellmann.com/2007/07/pymotw-subprocess.html中的某些示例)。爲了攔截curses程序 - 我懷疑會當你需要模擬終端時,很快變得很乏味... – 2009-08-17 22:59:08
我的不好,我認爲要更新現有的行,你必須使用curses。 – 2009-08-17 23:18:10