簡體   English   中英

通過在Python中運行Unix命令獲取實時輸出

[英]Getting live output from running unix command in python

我正在使用下面的代碼來運行Unix命令:

cmd = 'ls -l'
(status,output) = commands.getstatusoutput(cmd)
print output

但是問題在於,它僅在命令完成后才顯示輸出,但是我想在執行過程中看到輸出。 ls -l只是偽指令,我在實際程序中使用了一些復雜的指令。

謝謝!!

由於這是家庭作業,因此這里是代替完整解決方案的處理方法:

  1. 使用subprocess.Popen類來調用可執行文件。 請注意,構造函數采用一個命名的stdout參數,並查看subprocess.PIPE

  2. 在單獨的線程中從Popen對象的STDOUT管道讀取,以避免死鎖。 請參閱threading模塊。

  3. 等待子進程完成(請參閱Popen.wait )。

  4. 等待直到線程完成對輸出的處理(請參閱Thread.join )。 注意,這很可能在子過程完成之后發生。

如果您需要更多幫助,請描述您的確切問題。

除非我不知道Python中有其他更簡單的方法,否則我相信您必須深入研究稍微復雜的os.forkos.pipe函數。

基本上,想法是派生您的進程,讓孩子執行您的命令,同時將其標准輸出重定向到由父級讀取的管道。 您將輕松找到這種模式的示例

如果大多數程序未連接到tty,它們將使用塊緩沖輸出,因此您需要運行連接到pty的程序。 最簡單的方法是使用pexpect:

for line in pexpect.spawn('command arg1 arg2'):
    print line

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM