2016-07-25 132 views
0

我想運行一個可以執行OS(linux)命令的python腳本,我有幾個模塊可以幫助我像os,subprocess那樣執行操作。在OS模塊中,我無法將輸出重定向到一個變量。在subprocess.popen中我無法在參數中使用變量。需要有人幫助尋找替代品。使用模塊從python執行操作系統命令

我試圖從python腳本運行一些操作系統命令。例如df -h輸出。它通過使用一些模塊如os或subprocess很好地工作,但我不能將這些輸出存儲到任何變量。

這裏我無法將這個輸出保存到一個變量。如何將其保存到變量中。

我看到了多個其他選項,如subprocess.Popen,但沒有得到正確的輸出。

下面的程序我使用了子進程模塊,但在這裏我有另一個問題,因爲命令很大,我無法在subprocess.Popen中使用變量。

+0

shantojosee @ SRV-DCB-ERP-mgnt01:〜/蟒蛇>貓平 #/! USR /斌/ Python的 進口子 #請輸入 主機的raw_input =用戶(「輸入主機平:」) #設置echo命令,並直接輸出到管道 P1 =蘇bprocess.Popen([ '平', '-c 2',主機],標準輸出= subprocess.PIPE) #執行命令 輸出= p1.communicate()[0] 打印輸出 shantojosee @ srv- dcb-erp-mgnt01:〜/ python> –

+1

請編輯您的問題以添加代碼,而不是評論部分 – DeepSpace

回答

0

根據您的具體使用情況,使用子流程或pexpect。

子過程可以做os.system的功能,還有更多。如果你需要啓動一些命令,等待其退出,然後得到輸出,子進程可以做到這一點:

import subprocess 
res = subprocess.check_output('ls -l') 

但是,如果你需要一些命令行實用程序交互,也就是反覆讀/寫,然後看看pexpect模塊。它是爲Unix系統編寫的,但如果你想要跨平臺的話,Windows有一個叫做winpexpect的端口。 '前'

產卵的屬性可能是你需要的東西:

p = pexpect.spawn('/bin/ls') 
p.expect(pexpect.EOF) 
print p.before 

(見docs