Windows CMDバッチ、STARTおよび出力リダイレクト


34

バッチファイルから2つのプログラムを同時に実行し、最初のプログラムの出力を次のようなテキストファイルにリダイレクトしたいと思います。

start python 1st.py arg1 arg2 > out.txt
start 2nd.exe %1 arg2 arg3

プログラムは期待どおりに実行されますが、すべての出力は標準出力に表示されます。


これは機能するはずです。何も知らずに、1st.pyが出力で面白いことをしているのではないかと思います。
-zpletan

いいえ、しかしstderrに書き込みます。
なし

そのため、>stdoutのみをリダイレクトします(私は思う)。いずれにせよ、すでに必要なものを持っているように見えます。
zpletan

回答:


35

次のようにする必要があります。

start cmd /c python 1st.py arg1 arg2 ^> out.txt

ありがとう、しかしそれは私にはうまくいきません(out.txtはローカルディレクトリに作成されていません)
なし

CScriptとVBscriptを使用してテストしたので、アイデアは適切です。二重引用符など、ここにリストされていないコマンドラインで何か「余分な」ことをしていますか?
パトリックシーモア

申し訳ありませんが、何かがひどく間違っていました-それは動作します!
なし

@パトリックシーモア、あなたの答えをありがとう!.batファイルなしで同じことを行うにはどうすればよいですか?これはcmd。python.exe ^> python_out.txtからは機能しません。エラーが発生しました:python.exe:ファイルを開けません '>':[Errno 22] Invalid argument
ネオ

7

リダイレクトはstartコマンドに適用されますが、どういうわけcmd.exeか実行されるインスタンスには適用されません。

>演算子がエスケープされている場合、すべてが機能するはずです。

start 1st.py arg1 arg2 ^> out.txt

(stderrもリダイレクトしたい場合は2^>、それを使用します。)


4
ありがとう、しかしそれは私には役に立たない。
なし

5

さらに、stderrとstdoutの両方をリダイレクトしたい場合、これは私のために機能します

start.call delay.bat ^ 1 ^> log.txt ^ 2 ^> ^&^ 1

基本的に、すべてのキャラクターをエスケープする必要があるようです。通常、このコマンドは次のようになります。

delay.bat 1> log.txt 2>&1


5

私にとってのコツは、コマンドを別のバッチファイルに移動することでした。

rem this first batch file triggers the second one:
start the_second.bat arg1 arg2 out.txt

the_second.batは次のようになります。

python 1st.py %1 %2 > %3

これは、正解と比較して非常に洗練された回避策です。
DavidPostill

2
「正解」は似たような問題では私にはうまくいかず、少なくとも人々が知りたいと思うかもしれない解決策かもしれないと思いました。
フロリアンストラウブ

私は反対しなければなりません。コマンドで文字をエスケープする正しい方法を学ぶことは、はるかに良いアイデアです。
DavidPostill

>>を使用して出力の添付をエスケープする方法を教えてください。
フロリアンストラウブ

私はもうあなたに伝えた。受け入れられた答えを読んでください。
DavidPostill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.