2010-06-24 33 views
1

我需要編寫一個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"} 

那可能嗎?

+0

謝謝! David和Noufal都回答了這個問題! – riccardo 2010-06-25 11:42:21

回答

5

不可以,對子流程中的環境變量所做的任何更改都將保留在該子流程中。 (據我所知,就是這樣)當子進程終止時,其環境就會丟失。

我建議讓shell腳本將其環境或至少是你關心的變量,打印到它的標準輸出(或標準錯誤,或者它可以將它們寫入文件),並且你可以閱讀來自Python的輸出。

+1

這可能是最好的方法。然而,我要補充的一個建議是,如果無法修改定義值的shell腳本,則可以將命令更改爲'bash -c'。 ; env''實質上,您的子shell會爲環境提供資源,然後將其自行打印出來,而不是讓腳本直接執行。 – Rakis 2010-06-24 12:31:52

0

我同意David的帖子。

Perl有一個Shell::Source模塊可以做到這一點。它的工作原理是在子程序中運行所需的腳本,該子程序附有env,該子程序生成由=符號分隔的變量值對列表。您可以解析並將環境「導入」到您的流程中。如果您需要這種行爲,該模塊值得一看。