我試圖編寫一個用於構建某些軟件的python包裝器。我需要使用不同的配置自動創建數百次,這意味着我不能只是autogen.sh ; ./configure ; make ; make install
。我使用的一些配置需要運行有條件地設置一些環境變量的腳本。我要的是能夠做這樣的事情:運行多個shell命令並等待結果的Python腳本
command = './autogen.sh'
ret = subprocess.call(command.split())
if ret != 0:
sys.exit(ret)
command = './script.sh ; ./configure <configure-flags>'
ret = subprocess.call(command.split())
if ret != 0:
sys.exit(ret)
command = 'make'
ret = subprocess.call(command.split())
if ret != 0:
sys.exit(ret)
command = 'make install'
ret = subprocess.call(command.split())
if ret != 0):
sys.exit(ret)
我遇到的問題是,在script.sh
設置環境變量沒有得到保存configure
。我在Sending multiple commands to a bash shell which must share an environment中看到了部分解決方案,但涉及將命令刷新到stdin
並輪詢一個結果,當您有一個非常長的makefile時(我的大約需要10-20分鐘),它不會真正起作用,它也不會給出你是我需要知道的構建是否成功的返回值。
有沒有人知道更好的方法來做到這一點?
我實際上不是所有的挑剔環境從一個'調用(被保存)'到另一個。我只需在每個'call()'中調用安裝腳本即可。 –
「如果子進程打印'rm -rf /'」如果子進程直接執行'rm -rf /'怎麼辦? –
@thatotherguy:的確如此。 :-)然而,我正考慮使用較窄的通信渠道來運行更多的大型系統,這些系統可以隔離(不同的UID,甚至可以在不同的虛擬機上運行)等子項。 – torek