2009-04-22 29 views

答えて

16

、あなたがあなたのショートカットのターゲットを前に付けることができますコマンドが終了したときにウィンドウが閉じなくなります。 UNIXシステムでは

+0

のための '印刷ex'のバッチファイルを使用しています:私のバッチファイルには、Pythonを起動してProjectsモジュールを自動的にインポートするための 'python -m Projects'という行が含まれていました。これを 'cmd/K python -m Projects'に変更しました。これは宣伝されているように動作し、エラー後にcmdコンソールが開いたままになりました。 –

0

あなたの質問はあまり明確ではありませんが、例外が発生した場合、Pythonインタプリタが終了する(したがって呼び出し元のコンソールウィンドウが閉じます)と仮定します。

例外をキャッチしてインタプリタを終了することなくそれを印刷するには、Pythonアプリケーションを修正する必要があります。これを行う1つの方法は、「Enterを押して終了」を印刷して、コンソールウィンドウから入力を読み取って、ユーザーがEnterキーを押すのを待つことです。

14
try: 
    #do some stuff 
    1/0 #stuff that generated the exception 
except Exception as ex: 
    print ex 
    raw_input() 
+1

を行うことができます( 'traceback.print_excを使用する場合があります)'代わりにそれらのために、より詳細なスタックトレース –

7

メインコードをインポート/実行する2番目のスクリプトを作成できます。このスクリプトは、あなたのコードがif __name__ == "__main__": main()イディオムを使用して構成されていると仮定すると、(その後、終了する前にユーザーの入力を待つ)

をすべての例外をキャッチし、トレースバックを印刷します。..

def myfunction(): 
    pass 

class Myclass(): 
    pass 

def main(): 
    c = Myclass() 
    myfunction(c) 

if __name__ == "__main__": 
    main() 

は、「ファイルの名前は..and myscriptname.py」(明らかにそれを変更することができます)、以下は

from myscriptname import main as myscript_main 

try: 
    myscript_main() 
except Exception, errormsg: 
    print "Script errored!" 
    print "Error message: %s" % errormsg 
    print "Traceback:" 
    import traceback 
    traceback.print_exc() 
    print "Press return to exit.." 
    raw_input() 

raw_input()Python 3input()に置き換えられていることに注意してください)

に動作します

あなたがmain()機能を持っていない場合、あなたはtry:ブロックにimport文を入れて使用します。

try: 
    import myscriptname 
except [...] 

余分なラッパー・スクリプトを必要としない、よりよい解決策、1は、スクリプトを実行することですIDLEまたはコマンドラインから入力してください。

Windowsの場合、[スタート]> [ファイル名を指定して実行]に移動し、cmdと入力して入力します。 Linuxの/ MacのOS X上

それは少し簡単です(あなたがC:\Python\へのPythonをインストールした場合)すると...のような

cd "\Path\To Your\ Script\" 
\Python\bin\python.exe myscriptname.py 

を何かを入力して、あなたはちょうどそのpython myscriptname.py

最も簡単な方法は、希望cd /home/your/script/を実行しますIDLEを使用し、IDLEを起動し、スクリプトを開いて実行ボタン(F5またはCtrl+F5と思う)をクリックします。スクリプトが終了すると、ウィンドウは自動的に閉じられないため、エラーが表示されます。

また、Chris Thornhillとして、Windowsではスクリプトのショートカットを作成することができます。http://www.computerhope.com/cmd.htmから

C:\WINDOWS\system32\cmd.exe /K [existing command] 

:これは防ぐことができます

C:\WINDOWS\system32\cmd.exe /K <command> 

:あなたは、Windows OS上でこれを行う場合は

/K command - Executes the specified command and continues running. 
3

(Windowsは、既に上記カバーされている...)あなたは-iフラグを含めるために、インタプリタ引数を変更することができます!

ます。#/ usr/bin/pythonの-i

からmanページ:

-i

スクリプトは、最初の引数として渡されるか、-cオプションを使用すると、スクリプトやコマンドを実行した後、対話型モードに入ります。 $ PYTHONSTARTUPファイルは読み込まれません。これは、スクリプトが例外を発生させたときにグローバル変数やスタックトレースを検査するのに便利です。

11
未処理の例外が発生したときにあなたがアプリケーション生き続けてトップレベルの例外ハンドラを登録することができます

def show_exception_and_exit(exc_type, exc_value, tb): 
    import traceback 
    traceback.print_exception(exc_type, exc_value, tb) 
    raw_input("Press key to exit.") 
    sys.exit(-1) 

import sys 
sys.excepthook = show_exception_and_exit 

あなたがCから呼び出されるイベントハンドラ内でoccuring例外を持っている場合、これは特に便利ですこれはしばしばエラーを伝播しません。

+0

+1これは、インポート中に例外が発生した場合でも、ファイル全体を再インデントしなくても動作します。また、* ShellExecuteExなどのバッチファイルから*実行していないときにも機能します。 –

+0

大変ありがとうございます。 –

+0

しかし、それらの 'exc_type、exc_value、tb'引数は何ですか? (私はPython 3.6を使用しています) –

1

pyファイルをダブルクリックする代わりに、すでに開いているCMDウィンドウにドラッグしてEnterキーを押します。例外の後は開いたままです。

ダン

0

Windowsを使用している場合は、この

import os 

    #code here 

    os.system('pause') 
関連する問題