2011-12-28 29 views
14

我需要存儲我在一個變量中執行的shell命令的結果。但我無法得到。我試過像:如何在python中將執行的shell命令的結果存儲在變量中?

call=os.system("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'") 
print call 

但它在終端打印結果並打印呼叫的值爲零,可能表示成功。如何獲得存儲在變量中的結果?

+1

請看這裏:http://stackoverflow.com/questions/1410976/equivalent-of-backticks-in-python – georg 2011-12-28 17:46:15

回答

26

使用subprocess模塊來代替:

import subprocess 
output = subprocess.check_output("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'", shell=True) 

編輯:這是新的Python 2.7。在早期版本中這應該工作(與改寫命令如下圖所示):

import subprocess 
output = subprocess.Popen(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'], stdout=subprocess.PIPE).communicate()[0] 

作爲一個側面說明,你可以重寫

cat syscall_list.txt | grep f89e7000 

grep f89e7000 syscall_list.txt 

而且您甚至可以用一個awk腳本替換整個語句:

領導到:

import subprocess 
output = subprocess.check_output(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt']) 
+0

我使用Python 2.6.6,它給了我錯誤:' AttributeError:'模塊'對象沒有屬性'check_output' ' – user567879 2011-12-28 17:50:59

+0

@ user567879,你是對的。這個函數是在Python 2.7中添加的。我將在Python 2.6的一個方法中進行編輯。 – 2011-12-28 17:55:58

+0

如果我需要將python變量作爲參數傳遞給執行的shell命令,該怎麼辦? – user567879 2011-12-29 02:32:10

9

commands.getstatusoutput適用於這種情況。

import commands 
print(commands.getstatusoutput("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'")) 
+0

你是我的英雄! – quickshiftin 2013-10-10 20:02:46

+0

該鏈接不再工作,這在3.x中被刪除請參閱https://docs.python.org/2/library/commands.html – user3885927 2018-02-17 00:17:51

0

所有其他的答案在這裏都很好的答案。在許多情況下,您確實需要運行外部命令。

這個特定的例子有另一個選擇:你可以讀取文件,逐行處理它,並對輸出做一些事情。

雖然此答案不適用於「更常見的問題被問到」,我認爲它應該始終考慮。即使可能,它並不總是「正確答案」。記住這一點(更容易),並知道何時(不)應用它(更困難),會使你成爲更好的程序員。

相關問題