2013-08-21 80 views
1

在某些shell腳本中,您需要確認「yes」來運行shell,一個更簡單的方法是使用「yes」和pipe,就像這樣:如何在python中使用os.system()來運行shell命令

yes | test.py 

然後,您可以自動運行shell腳本而不會回答「是」了。 今天,當我通過嘗試使用python時:os.system(「yes | **。sh」),我得到了一個錯誤。

這裏是我的test.py文件:

import os 
def f(): 
    cmd1 = "yes | read "   
    os.system(cmd1) 
f() 

,並在外殼鍵入如下命令運行:蟒蛇test.py.故障信息是: 是:標準輸出:斷開的管道 是:寫入錯誤

但是如果我在shell中輸入「yes | read」,它工作正常。 有誰可以告訴我爲什麼?

+0

不要;使用'subprocess'模塊。 – geoffspear

回答

1

試試這個

import os 
def f(): 
    cmd1 = "echo 'yes' | read " 
    os.system(cmd1) 
f() 
0

您在shell中運行的子進程也得到了「管閉」信號時,yes繼續嘗試管道被關閉後寫入到管道,但有的炮彈被配置爲陷阱並忽略這個錯誤,所以你沒有看到錯誤信息。無論如何,這是無害的。

雖然不清楚你希望這些代碼能完成什麼,在子流程中運行read毫無意義,因爲執行read的子流程將立即退出。

如果您想重複打印yes,那麼在Python本身就足夠簡單了。

while True: 
    print('yes') 

如果你想測試你自己的程序,你可以更改代碼,以便啓用調試標誌運行時,它不需要交互式輸入。無論如何,如果這是你的目標,你現在的方法就是從內到外;父進程(Python)進程將等待子進程管道運行。 (當你長大後,你會發現如何將輸入作爲命令行參數傳遞,以便你的腳本基本上不需要交互式提示。由於多種原因,這是一個更好的設計,但能夠自動化測試你的代碼當然是其中之一。)

相關問題