2009-05-31 6 views
1

私はまだコーディングの初心者です。py2exe - ソケットに接続するときに実行可能なフリーズが発生する

py2exeを使用してWindows実行可能プログラムに書き込んだPythonスクリプトを変換しようとしています。ただし、スクリプトを正常に変換することはできますが、実行可能ファイルは完全に機能しているようには見えません。多くのデバッグの後、私は、原因と次のコードは、スクリプトがPyDevは、それ自体から実行、スクリプトがなくても実行することができますされたときに問題が発生しない問題

host = str(raw_input('Enter Host IP Address: ')) 
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
client_socket.connect((host, 5000)) 

であるように思わ

を単離しました問題。コンソールアプリケーションである実行可能なウィンドウは、別のホストに接続しようとするとがハングアップするです。

これは既知の問題ですか、間違っていますか?どんな助けも大歓迎です。

+0

おそらくスローされた例外をキャッチしようとしますか?多分、タイムアウト値が何であるかチェックしてください。 –

+0

私はvb.netで似たようなプログラムを書いたときにちょっとしたことを知っています。ソケット接続コマンドがメインプログラムスレッドをブロックする可能性があるため、ping /接続時にバックグラウンドスレッドを使用しなければなりません。 – Jim

+0

@Brian R. Bondy - 例外はありません。プログラムはローカルサーバーに接続するはずですが、タイムアウト値を設定していません。 – kouei

答えて

1

IPアドレスを入力できますか? that threadを読むと、py2exeはコンソールを起動するために特別なウィンドウ引数を必要とするようです。それ以外の場合、raw_inputは標準入力からの読み込みを試み、何も見つからないためハング/クラッシュします。

スレッドの年齢を考えると、py2exe docをチェックしました。コンソール属性にスクリプトを挿入するとよいでしょう。

私は本当にその動作がraw_inputに関連していると思っています。それはではなく、ソケット操作によって引き起こされたものです。

+0

こんにちは。私はsetup.pyで "console"引数を使用しており、コンソールアプリケーションは入力を求めるプロンプトを出します。ソケット操作をコメントアウトして、スクリプトが入力(ホストのIPアドレス用)を出力するようにすれば、正常に動作します。そのように、私はそれが接続のためだと仮定しました。 :/ – kouei

+0

次に、接続がブロックされているので、相手側が応答するのを待っているため、接続しようとする前にclient_socketでタイムアウトを設定してください。 (デフォルトのタイムアウトはNoneです。つまり、サーバーが壊れていると、クライアントは永遠に待機します)。 「タイムアウトした」SocketErrorが壊れた場合、サーバーがリッスンしていない/間違ったアドレスが使用されていることを意味します。 – NicDumZ

関連する問題