問題1:通過export abcd=abcd方式設定環境變數,獲取不到設定值
>>
>
import commands
>>
>
import os
>>
> cmd =
"export abcd=abcd"
>>
> env = commands.getoutput(cmd)
>>
>
print os.getenv(
"abcd"
)none
>>
>
問題2:通過os.environ[『abcd』] = 'abcd』方式設定環境變數,可以獲取到設定值,但只在python程序中有效,執行完畢後無法獲取>>
>
import os
>>
> cmd =
"export abcd=abcd"
>>
> os.environ[
'abcd']=
'abcd'
>>
>
print os.getenv(
"abcd"
)abcd
>>
>
退出後,查詢環境變數,查不到
[root@localhost ~]
# env|grep abcd
[root@localhost ~]
#
或將其寫成指令碼
#!/usr/lib/python
# -*- coding: utf-8 -*-
import os
defset_env()
: os.environ[
'abcd']=
'abcd'
env = os.getenv(
"abcd"
)print env
if __name__ ==
"__main__"
: set_env(
)
執行:
[root@localhost env]
# python ./env.py;echo $abcd
abcd
[root@localhost env]
#
設定成功了觀景變數abcd,但是還是取不到值。
問題分析:
對於環境變數的設定來說,python直接執行export abcd=abcd
是無法設定成功的,設定方法可以通過os.environ['abcd'] = 'abcd'
來設定,但是由於python執行是啟動新的程序,設定的環境變數只在該程序內有效,所以env.py執行完畢後也無法再獲取到設定的環境變數。
解決辦法:
我們都知道直接在shell中執行export abcd=abcdefg
是可以成功設定的,也就是說在標準輸出中執行該命令是可以設定為session級別的環境變數(其實也是程序級別,在shell中在啟動程序就屬於該shell的子程序是可以繼承父程序的環境變數),所以可以通過echo $abcd
命令再次查到結果。
如:
[root@localhost ~]
# export abcd=abcdefg
[root@localhost ~]
# echo $abcd
abcdefg
[root@localhost ~]
#
所以要通過python指令碼設定環境變數,就可以將export命令定向到標準輸出,即print
更改指令碼為:
#!/usr/lib/python
# -*- coding: utf-8 -*-
import os
from pipes import quote
defset_env()
:print
"export abcd={};"
.format
(quote(
"abcd"))
if __name__ ==
"__main__"
: set_env(
)
執行:
[root@localhost env]
# eval $(python ./env.py);echo $abcd
abcd
[root@localhost env]
# env|grep abcd
abcd=abcd
[root@localhost env]
#
Linux語言環境設定
程式執行使用一套語言需要有字符集 資料 和字型 顯示 locale是根據計算機使用者所使用的語言,所在國家或者地區,以及當地的文化傳統所定義的乙個軟體執行時的語言環境。一 locale詳解 在 linux 中通過 locale 來設定程式執行的不同語言環境,locale 由 ansi c 提供支援。...
Linux語言環境設定
程式執行使用一套語言需要有字符集 資料 和字型 顯示 locale是根據計算機使用者所使用的語言,所在國家或者地區,以及當地的文化傳統所定義的乙個軟體執行時的語言環境。一 locale詳解 在 linux 中通過 locale 來設定程式執行的不同語言環境,locale 由 ansi c 提供支援。...
Linux中Python環境變數的設定
這種新增python path環境變數的方式,只在當前指令碼程式範圍內起作用。若要在整個linux環境中起作用,就要新增設定linux的pythonpath變數。jxj ubuntu1 tffrcnn python python 2.7.12 default,nov 192016,06 48 10 ...