2012-11-09 105 views
2

要在Python中執行Linux命令,我們有很好的模塊:os和subprocess。我已經在基於控制檯的python程序中使用os和subprocess模塊​​集成了Linux命令,但是在Django中不會發生同樣的事情。以這個視圖爲例:如何在Django中執行Linux命令?

def hello(request): 
    res = os.system('ls') 
    return render_to_response('thanks.html', {'res':res}, context_instance=RequestContext(request)) 

這個視圖返回的唯一東西是0.我也嘗試過使用子過程。我得到的輸出是0.出什麼問題了?

+0

P.S我已經在模板中正確調用了var {{rs}}。 – sachitad

回答

2

這不是一個Django問題。這就是os.system所做的 - 它給出了系統調用的返回值,在這種情況下爲0成功執行。

如果您需要抓取外部程序的輸出,您應該使用subprocess.check_output(僅限於2.7)。但是,如果您只關心目錄列表,則有一種更好的方法可以使用,即使用os.listdir

+0

謝謝! os.listdir列出了所有的目錄。不過,我想知道如何讓os.system('ls')列出所有的目錄。我只是用ls來獲得命令的工作。而不是我想要使用的:rsync --list-only/home – sachitad

+0

正如我所說的,您應該使用'subprocess.check_output'來獲取外部調用的輸出。你不能用'os.system'來完成。 –

+0

我使用Django和Debian,它有默認的Python 2.6.6。所以,我不能使用check_output。有沒有其他方法? – sachitad

0

0這種情況是退出狀態的返回碼,這意味着在這種情況下「沒有錯誤」。

根據os.system doc

在Unix上,返回值是(),用於等待指定的格式編碼的過程的退出狀態。請注意,POSIX沒有指定C系統()函數返回值的含義,所以Python函數的返回值是依賴於系統的。在Windows上,返回值是運行命令(由Windows環境變量COMSPEC給出)後由系統shell返回的值:在command.com系統上(Windows 95,98和ME),它始終爲0;而在Windows 95,98和ME中,在cmd.exe系統上(Windows NT,2000和XP),這是命令運行的退出狀態;在使用非本地shell的系統上,請查閱您的shell文檔。