我試圖在執行程序之前設置一種基於不同配置文件定義Windows環境的優雅方式。我不是自己調用程序執行(這會讓事情變得更簡單),而只是將正確的環境插入到現有的自動化過程中。作爲Windows腳本命令執行Python腳本的輸出
我可以爲每個可能的配置編寫setenv.bat
文件,但是更願意解析將在其他場景中使用的config.yml
。
Pyton腳本感覺就像要走的路。但是Python中設置的環境變量在從Python進程返回後將會丟失。
我現在使用Python作爲轉換器/發生器從配置創建批處理命令。讓python cmd_from_cfg.py config.yml
輸出是這樣的:
SET "ENV_VAR_A=config-value"
SET "ENV_VAR_B=config-value"
CALL "path-from-config.bat"
這可以被重定向到一個文件並執行:
python cmd_from_cfg.py config.yml > setenv.bat
setenv.bat
program.exe
但帽子我真的想這樣做(和曾希望會很容易)被跳過創建setenv.bat
並立即執行Python腳本結果作爲Windows命令。這可能嗎?
我試過,但它一旦達到一個空白停止每一行:
FOR %%i IN ('python cmd_from_cfg.py config.yml') ECHO %%i
感謝您的時間!
這可能是mojibake的來源,因爲Python默認將ANSI寫入管道,而CMD的for/f循環默認使用當前控制檯代碼頁逐行解碼,默認爲OEM。 Python腳本和批處理腳本需要就編碼達成一致。最好這應該是UTF-8(例如CMD中的'chcp.com 65001',併爲Python設置'PYTHONIOENCODING = utf-8'並打印'unicode'字符串),以便能夠處理任何Unicode字符。 – eryksun