2011-01-13 90 views
3

我有一個shell腳本,它獲取域的whois信息,並根據域輸出takenavailable到shell。用Python獲取shell輸出?

我想執行該腳本,並能夠在我的Python腳本中讀取此值。

我一直在玩subprocess.call,但無法弄清楚如何獲得輸出。

例如,

subprocess.call('myscript www.google.com', shell=True) 

將輸出taken到外殼。

+0

哪個版本的Python的是你使用?一些答案建議使用2.7中新增的`subprocess.check_output`。 – 2011-01-14 07:25:12

回答

5
import subprocess as sp 
p = sp.Popen(["/usr/bin/svn", "update"], stdin=sp.PIPE, stdout=sp.PIPE, close_fds=True) 
(stdout, stdin) = (p.stdout, p.stdin) 
data = stdout.readline() 
while data: 
    # Do stuff with data, linewise. 

    data = stdout.readline() 
stdout.close() 
stdin.close() 

是我使用的習慣用法,顯然在這種情況下我正在更新一個svn倉庫。

8

subprocess.call()不會給你輸出,只有返回碼。對於輸出,您應該使用subprocess.check_output()。這些都是popen函數族的友好包裝,你可以直接使用它。

有關詳細信息,請參閱:http://docs.python.org/library/subprocess.html

1

嘗試subprocess.check_output

6

手動使用標準輸入和標準輸出與POPEN是這樣一個共同的模式,它已經被抽象成子模塊中一個非常有用的方法:communicate

例子:

p = subprocess.Popen(['myscript', 'www.google.com'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
(stdoutdata, stderrdata) = p.communicate(input="myinputstring") 
# all done!