2011-12-22 10 views
13

可能性の重複:
On localhost, how to pick a free port number?どのようにPythonで無料のポート番号を選ぶのですか?

私の要件は、この質問は異なっています。

On localhost, how to pick a free port number?

私のpythonを使用して別のプロセスのテスト・セットアップを書いています。他のプロセスは、渡されるポート番号を必要とします(たとえば、コマンドラインパラメータとして)。多くのユーザーが通常同じボックスで同じテストを実行するので、ランダムなポート番号をハードコードすることはできません。さて、どのように私はPythonで空きポートを選択するのですか?

編集:私はPythonでソケットを作成しておりません

。コマンドライン引数として他のプロセスに番号を渡すだけでいいです。

DRHの回答から、 ダミーソケットを作成し、そのポート番号を取得して閉じ、実際のプロセスに渡すことができました。これを行うための良い方法はありますか?

+4

あなたの要求はどのように異なっていますか? – wim

+1

私はPythonでソケットを作成していません。どうすれば私はOSに無料のポートを提供するのですか?その番号をコマンドライン引数として他のプロセスに渡すだけでいいです。 – balki

+0

無料のポート番号をOSに尋ねるのは不安です。ソケットを開かずに何度も尋ねるとどうなりますか?リクエストごとに異なるポート番号を取得することは保証されていますか?一度聞いてそのポートでプロセスを実行した後に – jcollado

答えて

12

あなたが求めていることを行うための安全な方法ではない可能性があります。 OSが現在空いているポートを返すことができたとしても、ポートを要求してから起動するアプリケーションとバインドしようとする間に、別のプロセスがそのポートにソケットをバインドしないという保証はありません。

無料である可能性のあるポートを探している場合は、ここで説明した0にバインドしてOn localhost, how to pick a free port number?のようにバインドし、結果のソケットを閉じて(ポートを解放して)、その値をアプリケーションに渡します。

+0

私はその間にそのポートを取得している別のプロセスはまれだと思います。だから私はそれに行くだろう。とにかく、ダミーソケットを作成して閉じる代わりに、osに尋ねるより良い方法を期待していました。 – balki

+7

記録のために、その提案の実装は次のとおりです:https://gist.github.com/3979133 –

関連する問題