出力をファイルに書くのが簡明です。一時ファイル名は、%0
と%RANDOM%
と%TIME%
とかで、どうにかする。あるいは、mkdir
を使って占有するディレクトリーを作ってその中に書くか。
副作用の無いプログラムだと、出力取得と、戻り値取得で、2回実行するのも分かり易いです。実行時間がそんなに長くなければですが。
それらが難しそうなら、他の手段はあります。
本来の出力の後で、戻り値を出力して、取得してから分ける。
お書きのコードからして、出力は必ず1行限定のようなので、その場合はわりと分かり易いです。
(ダブルクォートとシングルクォートを両方使うのでusebackq
でバッククォートも使う)
CMD
1setlocal enabledelayedexpansion
2for /f "usebackq delims=" %%A in (
3 `python -c "import os;print(os.system('python test.py'))"`
4 ) do set RESULT=!CC!&set CC=%%A
5echo OUTPUT=%RESULT% CC=%CC%
出力が複数行あるなら少し変えないと。
参考:占有のディレクトリーを作る
CMD
1setlocal
2set WORK_DIR=~~~~
3:LOOP
4set MY_WORK=%WORK_DIR%\%~n0-%RANDOM%
5rem すでに別に処理で同名の物が作られていれば失敗するので別の名前でやり直す
6mkdir %MY_WORK% 2>NUL
7if ERRORLEVEL 1 goto LOOP
8
9python test.py >%MY_WORK%\foo.txt
10set CC=%ERRORLEVEL%
11type %MY_WORK%\foo.txt
12
13rmdir /s /q %MY_WORK%
追記:最初の案で遅延環境変数展開を使わずサブルーチンを使う
CMD
1setlocal
2for /f "usebackq delims=" %%A in (
3 `python -c "import os;print(os.system('python test.py'))"`
4 ) do call :SUB "%%~A"
5echo OUTPUT=%RESULT% CC=%CC%
6exit /b
7
8:SUB
9set "RESULT=%CC%"
10set "CC=%~1"
11exit /b
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/10/13 10:02
2024/10/13 13:28 編集