プログラムを実行する前に、さまざまな設定ファイルに基づいてWindows環境を定義する洗練された方法を設定しようとしています。私は自分自身でプログラムの実行を呼び出すのではなく(既存のものを簡単にする)、正しい環境を既存の自動プロセスに挿入するだけです。Pythonスクリプトの出力をWindowsスクリプトコマンドとして実行する
可能な設定ごとにsetenv.bat
ファイルを書き込むことができましたが、他のシナリオでも使用されるconfig.yml
を解析する方が好きです。
Pytonスクリプトは、行く方法のように感じました。しかし、Pythonで設定された環境変数は、Pythonプロセスから戻った後に失われます。
私は現在、configからバッチコマンドを作成するコンバータ/ジェネレータとしてPythonを使用しています。
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
しかし、帽子、私が本当にやりたい(と簡単だろう期待していた)の作成を省略しているpython cmd_from_cfg.py config.yml
出力このようなものをしてみましょうsetenv.bat
とすぐには、WindowsコマンドとしてPythonスクリプトの結果を実行します。これは可能ですか?
私はこれを試してみましたが、それは、すぐ空白に到達するよう、各ラインを停止します。お時間を
FOR %%i IN ('python cmd_from_cfg.py config.yml') ECHO %%i
感謝を!
PythonはデフォルトでパイプにANSIを書き込むため、CMDの 'for/f'ループはデフォルトで現在のコンソールコードページ(デフォルトはOEM)を使用して行ごとにデコードされるため、これは潜在的にmojibakeのソースです。 Pythonスクリプトとバッチスクリプトは、エンコーディングに同意する必要があります。これは、Unicode文字を処理できるように、UTF-8でなければなりません(たとえば、CMDでは 'chcp.com 65001'、Pythonでは' PYTHONIOENCODING = utf-8'を設定し、 'unicode'文字列を出力するのが望ましい)。 – eryksun