例として、perlなどで、(test.plとします)
print "stdout1\n";
print STDERR "STDERR1\n";
print "stdout2\n";
print STDERR "STDERR2\n";
print "stdout3\n";
print STDERR "STDERR3\n";
このように、標準出力と、標準エラー出力が混在した状態の処理があった場合、
コマンドプロンプト(Windows2000)にて、
C:\>test.pl
とすると、
stdout1
STDERR1
stdout2
STDERR2
stdout3
STDERR3
のように時系列に出力されますが、これをログファイルに取ろうとして、
C:\>test.pl 1>log.txt 2>&1
とすると、
C:\>cat log.txt
STDERR1
STDERR2
STDERR3
stdout1
stdout2
stdout3
のように、標準エラー出力が先に吐き出されてしまいます。
これを画面出力時と同様に時系列で取れるようにしたいのですが、どのようにすれば良いでしょうか?
単純なことで困っています。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
出力のバッファリングを解除すれば時系列で出力されます。
perlなら、printする前に
$| = 1;
とすればバッファリングされなくなります。
C言語ならsetbuf関数を使います。
その他の言語でも、"バッファリング"で検索をかければ解決策がいろいろ出てくると思います。
この回答への補足
ありがとうございました。
質問の文が良くなかったのですが、
標準出力と標準エラー出力を交互に履いているのは、
例に示したtest.plのような明示的なバッチファイルではなく、
バイナリのexeツールでした。
C:\>hoge.exe 1> log.txt 2>1&
が上手く行かない。
「バッファリング」でgoogleって探してみましたが、今一つ見つけられませんでした。
MS-DOSとして、バッチ処理前にバッファリングをOFFにする方法などは無いでしょうか。よろしくお願いします。
No.2
- 回答日時:
DOSプロンプトからプログラム出力のバッファリングを制御できる機能はないように思われます。
標準出力も標準エラー出力もコンソール以外のハンドルにリダイレクトすると、
出力内容がいったん一時ファイルに保存されてからリダイレクト先と結合するようなので
標準エラーを標準出力にリダイレクトしても時系列どおりに保存されないようです。
いろいろとパラメータを変えて試してみましたが駄目でした。
このカテゴリーよりも、技術者向けのカテゴリー
(コンピューター [技術者向け] > OS > Windows系OS か その他OS)で
質問しなおせば、もしかしたら解決につながる回答が得られるかもしれません。
お役に立てずすみません。
twinkleluzさん、わざわざ調査までして頂いて、感謝いたします。
私のほうでも、UNIX-like tools からtee(.exe)を持ってきて、
>hoge.exe 2>1 | tee -a log.txt
なども試してみましたが、やはり駄目でした。
画面には時系列に表示されても、ファイルへ書き込みさせると上手くいかないようです。
アドバイス頂いた通り、一度、この質問を閉じさせて頂いて、別コーナーで質問させて頂こうと思います。
取り急ぎ、お礼まで。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- 物理学 同軸ケーブル 伝送の仕組み TEMモード Maxwell方程式 円柱座標 ポアソン方程式 3 2022/08/16 20:40
- その他(ゲーム) SkyrimSEのMod organizer で困っています。誰か助けてください。 1 2022/12/05 01:49
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- C言語・C++・C# このプログラミング誰か教えてください 9 2022/04/22 18:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Linux環境 grepで改行コード(CR...
-
テキスト処理を行うツール
-
【シェルスクリプト】awkの結果...
-
grepで日付指定してlogを取り出...
-
sed で \\ を含む文字列に置換
-
zshの文字列置換機能
-
bashなどのシェル変数の値に改...
-
grepで検索文字列が完全一致し...
-
grepで拡張子がxlsxのファイル...
-
SONYの音楽ソフト「x-アプリ」...
-
iqoo neo 9と言うスマホがある...
-
windows10のごみ箱をrd /s /q C...
-
TOPコマンドで表示するCPU使用...
-
Dirコマンドでフォルダ内ファイ...
-
マウントしたUSBメモリに書き込...
-
自動パスワード入力でscpするス...
-
スクリプトのエラー「unexpecte...
-
VBAを使って電源を切るには?
-
Linux(Fedora)で外付けHDDが...
-
【Gmailコマンド】1年以上前の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Linux環境 grepで改行コード(CR...
-
grepで検索文字列が完全一致し...
-
grepで日付指定してlogを取り出...
-
grepで全角文字の行を抽出
-
sed で \\ を含む文字列に置換
-
フィールドでgrepみたいなこと
-
grepでの抽出箇所のみ置換して...
-
zshの文字列置換機能
-
テキストファイルの間引き削除...
-
【シェルスクリプト】awkの結果...
-
awkを用いて、特定の文字を含む...
-
特定文字列間の文字列の抽出の...
-
LINUXで半角の英数字以外の文字...
-
bashでブランク(空白)を検索文...
-
awkとsedはセットで覚えたほう...
-
awkのフィールド数制限について...
-
grepで変数が使えない
-
特定の文字列を含む行だけ削除...
-
sedコマンドで範囲指定しての部...
-
ファイルをある文字列で分割し...
おすすめ情報