是否可以調用從蟒蛇init_env.bat
的方式,允許 init_env.bat
改變調用腳本 進程的環境?
不容易,但是,如果init_env.bat
是非常簡單的,你可以嘗試分析它,並進行修改os.environ
自己。
否則,在子shell中產生它會更容易,然後調用set
來輸出新的環境變量,並從中解析輸出。
我下面的作品...
init_env.bat
@echo off
set FOO=foo
set BAR=bar
foobar.bat
@echo off
echo FOO=%FOO%
echo BAR=%BAR%
爲主。PY
import sys, os, subprocess
INIT_ENV_BAT = 'init_env.bat'
FOOBAR_EXE = 'foobar.bat'
def init_env():
vars = subprocess.check_output([INIT_ENV_BAT, '&&', 'set'], shell=True)
for var in vars.splitlines():
k, _, v = map(str.strip, var.strip().partition('='))
if k.startswith('?'):
continue
os.environ[k] = v
def main():
init_env()
subprocess.check_call(FOOBAR_EXE, shell=True)
subprocess.check_call(FOOBAR_EXE, shell=True)
if __name__ == '__main__':
main()
...爲其python main.py
輸出...
FOO=foo
BAR=bar
FOO=foo
BAR=bar
請注意,我只在地方您foobar.exe
的使用批處理文件,因爲我沒有一個.exe
文件方便可以確認環境變量的設置。
如果您使用的是.exe
文件,則可以從行subprocess.check_call(FOOBAR_EXE, shell=True)
中刪除shell=True
子句。
來源
2013-07-12 14:44:33
Aya
那會做他想做的事嗎?如果我沒有弄錯,他希望等同於* nix'source'命令,在這種情況下,它使用當前環境,以便在腳本執行後持久更改環境變量(而不是創建基於新環境的在當前版本上,然後在腳本執行結束時恢復當前版本)。 – JAB
我認爲這個問題是他在啓動過程之前嘗試設置一些配置,並且完成後並不在乎環境是什麼。 –