我需要編寫一個python腳本來啓動一個shell腳本並在腳本完成後導入環境變量。如何在Python中導入已完成進程的環境變量?
想象,你有一個shell腳本 「a.sh」:
export MYVAR="test"
在蟒蛇,我想這樣做:
import os
env={}
os.spawnlpe(os.P_WAIT,'sh', 'sh', 'a.sh',env)
print env
,並得到:
{'MYVAR'="test"}
那可能嗎?
我需要編寫一個python腳本來啓動一個shell腳本並在腳本完成後導入環境變量。如何在Python中導入已完成進程的環境變量?
想象,你有一個shell腳本 「a.sh」:
export MYVAR="test"
在蟒蛇,我想這樣做:
import os
env={}
os.spawnlpe(os.P_WAIT,'sh', 'sh', 'a.sh',env)
print env
,並得到:
{'MYVAR'="test"}
那可能嗎?
不可以,對子流程中的環境變量所做的任何更改都將保留在該子流程中。 (據我所知,就是這樣)當子進程終止時,其環境就會丟失。
我建議讓shell腳本將其環境或至少是你關心的變量,打印到它的標準輸出(或標準錯誤,或者它可以將它們寫入文件),並且你可以閱讀來自Python的輸出。
這可能是最好的方法。然而,我要補充的一個建議是,如果無法修改定義值的shell腳本,則可以將命令更改爲'bash -c'。
我同意David的帖子。
Perl有一個Shell::Source模塊可以做到這一點。它的工作原理是在子程序中運行所需的腳本,該子程序附有env
,該子程序生成由=
符號分隔的變量值對列表。您可以解析並將環境「導入」到您的流程中。如果您需要這種行爲,該模塊值得一看。
謝謝! David和Noufal都回答了這個問題! – riccardo 2010-06-25 11:42:21