2015-10-13 146 views
0

這個主題有很多問題,但不幸的是他們沒有解決我的問題。在Python中設置環境變量

我有一個shell腳本,其目的只是設置環境變量(我們稱之爲env.sh)。第二個shell腳本是源程序env.sh的主程序腳本,並使用在此處定義的變量。當兩者都是bash腳本時,這工作正常。

我有問題,我嘗試用python程序替換主shell腳本。這個python程序也依賴於由env.sh設置的那些環境變量。

在啓動任何使用這些環境變量的例程之前,我可以怎樣在python中輸入env.sh

  • 我必須運行bash -c source env.sh與模塊子進程。但是,如果我理解正確,這不起作用,因爲變量是在調用python程序的子進程中設置的,因此在父進程中不可用。它是否正確?

  • 類似的解決辦法是使用bash -c source env.sh && env和閱讀的env在python輸出,遍歷列表,並寫入os.environ。但是這種方法會再次寫入每個變量,即使它已經被定義。如果有很多變數呢?

  • 我能想到的最後一個解決方案是讀取並解析env.sh文件並設置我可以找到的變量。一個問題是,在一些env.sh出口嵌套,悲風:

    export SOMETHING=$FOO/Bar 
    

    這可能會變得複雜正確解析。

還有另一種方法,我還沒有找到或沒有想到?

+0

「python中的source env.sh」 - 問題就在這裏。爲什麼不在環境變量已經設置的時候執行python腳本? –

+0

我認爲這將是一種安全措施,如果沒有定義需要的環境變量,則不會退出程序。相反,我從文件中讀取它們並在繼續執行程序之前自行設置它們。這就是在shell腳本中完成的。 – ap0

+0

不要直接調用python腳本,使用包裝器。 –

回答