2017-12-07 1 views
1

私は、ポートが開いているかどうかを確認するものを書いていますが、それを私の使用に変更しています。試してみてください同じものを除いて

私はチェックのためのタイムアウトを設定し、タイムアウトに達した場合、それはsocket.timeout例外が発生しますが、私はtry内のコードブロックもsocket.timeoutで呼び出すことがしたい:

​​

私は# act on closed portで持っているコードブロックがあります長いです。私はコードを持っている関数を作成してelseステートメントとsocket.timeout例外を呼び出すことができますが、私はPythonにはもっと巧妙なものがあるはずです。

これを達成するにはどうすればよいですか?

+1

あなたは 'finally:'をお探しですか? – tripleee

+0

@tripleeeいいえ 'result == 0'なので、呼び出されたくないので、' finally'が常に呼び出されます。 – Moshe

+1

'= true;試してみてください。 result == 0の場合:= False;等;最後に、もし: "閉じたソケットで物事をする? – tripleee

答えて

0

私はあなたがここで賢明か魔法が必要なとは思わない。あなたのコードを見て、次に私の端末にpython -c "import this"と入力して、次の行の中でこれを見ました:

フラットが入れ子より優れています。

だから、あなたは、作成するために設定されたタイムアウトを必要とtry ... except timeoutでソケットをクローズしていない - 何もタイムアウトをスローしません:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.settimeout(5) 

try: 
    result = sock.connect_ex((check_server_ip, check_port)) 
    socket_connected = result == 0 
except socket.timeout: 
    socket_connected = False 

if socket_connected: 
    do_connected_stuff() 
else: 
    do_disconnected_stuff() 

sock.close() 

do_connected_stuff()場合は、このコードの正しさが本当に依存この場合、socket.timeoutを投げて、do_disconnected_stuff()が意味のあるアクションであれば投げることができます。すべての質問に「はい」と答えると、少なくともあなたのシステムを完全に見ることなく、かなり最適な構造になっています。

関連する問題