我有一個shell腳本,它獲取域的whois信息,並根據域輸出taken
或available
到shell。用Python獲取shell輸出?
我想執行該腳本,並能夠在我的Python腳本中讀取此值。
我一直在玩subprocess.call
,但無法弄清楚如何獲得輸出。
例如,
subprocess.call('myscript www.google.com', shell=True)
將輸出taken
到外殼。
我有一個shell腳本,它獲取域的whois信息,並根據域輸出taken
或available
到shell。用Python獲取shell輸出?
我想執行該腳本,並能夠在我的Python腳本中讀取此值。
我一直在玩subprocess.call
,但無法弄清楚如何獲得輸出。
例如,
subprocess.call('myscript www.google.com', shell=True)
將輸出taken
到外殼。
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倉庫。
subprocess.call()
不會給你輸出,只有返回碼。對於輸出,您應該使用subprocess.check_output()
。這些都是popen函數族的友好包裝,你可以直接使用它。
嘗試subprocess.check_output
。
手動使用標準輸入和標準輸出與POPEN是這樣一個共同的模式,它已經被抽象成子模塊中一個非常有用的方法:communicate
例子:
p = subprocess.Popen(['myscript', 'www.google.com'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
(stdoutdata, stderrdata) = p.communicate(input="myinputstring")
# all done!
哪個版本的Python的是你使用?一些答案建議使用2.7中新增的`subprocess.check_output`。 – 2011-01-14 07:25:12