python -i prog.py -h
上記のコマンドを呼び出すと、トレースバックと 'SystemExit:0'で予想される出力が得られます。 '-i'を指定しないと、トレースバックなしで期待される出力が得られます。なぜこれが起こり、トレースバックなしで同じコマンドでpythonフラグとプログラムフラグの両方を使用する方法がありますか?argparseをpythonとprogramの両方のフラグに使う方法は?
python -i prog.py -h
上記のコマンドを呼び出すと、トレースバックと 'SystemExit:0'で予想される出力が得られます。 '-i'を指定しないと、トレースバックなしで期待される出力が得られます。なぜこれが起こり、トレースバックなしで同じコマンドでpythonフラグとプログラムフラグの両方を使用する方法がありますか?argparseをpythonとprogramの両方のフラグに使う方法は?
-i
フラグを指定してPythonを実行すると、sys.exit
などで使用されるSystemExit
例外の処理が変更されます。通常、キャッチされていないSystemExit
は、Pythonを自動的に終了させます。しかし、-i
がオンの場合、SystemExit
は、トレースバックとすべてを含む他の例外と同様に処理されます。
SystemExit
のトレースバックを-i
でオンにする場合は、明示的にキャッチして無視する必要があります。例えば、docsから
def main():
try:
...
except SystemExit:
# Catch the exception to silence the traceback when running under python -i
pass
if __name__ == '__main__':
main()
ああ、これはargparseと対話モードで終了することとは関係がありません。混乱を避けるためにこの質問を削除してください。 – Jay
@ジェイ:将来の読者にはこの質問が役に立つかもしれないようです。私はそれを残すだろう。 – user2357112
:
exception SystemExit
This exception is raised by the sys.exit() function. When it is not handled, the Python interpreter exits; no stack traceback is printed.
argparseは「-h」オプションとSystemExit例外を採用して、あなたは、コマンドライン引数「-i」あなたと対話モードに入るので、トレースバックを参照してください。トレースバックは、あなたが実装し、別のオプションで送信する場合、印刷されないであることに注意してください:
即時python -i prog.py -p 80
二つの「クイックフィックス」私は考えることができます(ただし、実際に、それはあなたが本当に必要なのです何に降りてきますこのために?)に入れ
のtry-以外句あなたの引数を解析するとき。
のpython -i prog.py -h 2>を/ dev/null
あなたのコードを見ることなく伝えることが難しいです。私が試した基本的な例は問題なく動作します。どのプラットフォームを実行していますか? Windows? Linux? – scotty3785
@ scotty3785私はlinux(ubuntu 15.10)で動作しています。 – Jay