2016-12-14 10 views
0

Windowsシェルには、シェル経由で実行されたプロセスの終了コードを見つけるための%ERRORLEVEL%変数があります。したがって、これを.batファイルで使用して、.batファイル内から呼び出す外部スクリプトの終了コードを取得することができます。私は呼び出しているプロセスからより豊富なエラー情報を返したい(最初のインスタンスではスタックトレース)。私は実行しているPythonスクリプトからこれを返したいと思います。これはPythonの 'traceback'モジュールを使って行うことができます。 %ERRORLEVEL%でこれを保持できますか?この変数のドキュメントはありますか?Windowsシェル%ERRORLEVEL%変数に文字数制限がありますか?

+3

エラーレベルは、プログラムの戻りコード**(別名:整数)です。どのメッセージもプログラムのエラーチャネルの出力ですが、その変数には保持されません。 – Simon

+2

はい、サイモンが説明したように、あなたが 'exit'に渡す値は整数でなければなりません。スタックトレースは整数ではありません。 –

+0

ありがとうございます。これはPythonからexit(3)を受け取り、エラーコードを通過しますが、Pythonから渡された完全なエラーメッセージはエラーチャネルに渡されるため、%ERRORLEVEL%では使用できません。私が必要とする解決策は、スクリプトからの応答をerror.logに出力することだと思います。私はバッチファイルを使って制限されているようです。 Powershellはエラー応答をより柔軟に処理するための柔軟性を提供します –

答えて

2

%ERRORLEVEL%は、プログラムの終了コード、すなわちを返します。整数値であり、文字の制限はではありません。 wiki document for DOSで言及として:DOS用語で

errorlevelは、実行可能プログラムまたはサブルーチンによって返される整数の終了コードです。 Errorlevelsは、典型的には0から255

の範囲Windows section of the same documentは言う:署名されたように、コマンドインタプリタは扱いが

Windowsは、終了コードとして、32ビット符号なし整数を使用します。

+1

@LotPings - あなたはどこでそれを思いついたのですか?違います! EXIT/Bは負の値を返すことができ、%ERRORLEVEL%に正しく反映されます。 – dbenham

+0

@dbenham私はローカル時間が02時であると誤った仮定をしているようです。ごめんなさい。 – LotPings

+1

'%ERRORLEVEL%'は署名されており、255に制限されていません。Windowsの終了コードは32ビットの 'DWORD'です。通常、エラーコード自体は16ビット(0〜65535)です。これは、裸のWinAPIエラー番号の範囲です。存在する場合、終了コードの上位16ビットワードは、通常、['HRESULT'](https://msdn.microsoft.com/en-us/library/cc231198)または[' NTSTATUS' ](https://msdn.microsoft.com/en-us/library/cc231200)コード。特に、 'HRESULT'として返されるWinAPIエラーの上位ワードは '0x8007'であり、これは符号付きの値として負である。 – eryksun

2

文字列を返す場合は、%ERRORLEVEL%に文字列を割り当てることはできません。 %ERRORLEVEL%hereに関するドキュメントがあります。

あなたは環境変数を試すことができます。私はPythonをコードしませんが、Pythonでそれを行う方法があると確信していますし、バッチでそれらにアクセスできます。

また、発生するエラーを事前に知っている場合は、それぞれに数値を割り当ててから終了し、それぞれバッチ出力を持つことができます。しかし、それは退屈で本当に読めないので、あなたはそれをしたくないかもしれません。

関連する問題