1

私はpythonが初めてです:)永続的なソケットを作成したいと思います。ファイル記述子を使用してこれを実行しようとしました。私が試したのは:

  1. ソケットソケット接続を開くs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  2. ファイル記述子番号を取得するfd = s.fileno()

  3. ファイル記述子を I/O として開くos.open(fd)

しかし、私は得るOSError: [Errno 9] Bad file descriptor

私はPythonが初めてで、おそらく実装が間違っていると言いました。しかし、より簡単な例を試してみましたos.close(s.fileno())が、同じエラーが発生しましたOSError: [Errno 9] Bad file descriptor

ruby で書かれた例を見つけてテストしたところ、うまくいきました。Ruby で Unix の永続的なネットワーク ソケットを作成するにはどうすればよいですか?

誰でも私のためにこれをPythonに書き込むことができますか?私が達成したいのは:

私がやりたいことを理解していただければ幸いです。アドバイスありがとう!


あなたの応答の後、私は次のコードを試しました:

1

#!/usr/bin/python

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('google.com', 80))
s.send('GET /\n')
print s.fileno()

2

#!/usr/bin/python

import os
import sys

fd = int(sys.argv[1])
os.read(fd, 1024)

そして、エラーはOSError: [Errno 9] Bad file descriptor

問題が何であるかは確かです(私はphp開発者です)。PHPと同じように、Pythonはスクリプトを閉じた後にゴミを削除します。これをpythonで解決するには?

4

2 に答える 2

1

os.fdopen()を使用して、ファイル記述子を開きます。

たとえば、ファイルを開くモードを示すファイル名os.openフラグが必要なため、ここまで進んだことに実際に驚いています。私の例が示すように、ファイル記述子を受け入れるのではなく、ファイル記述子を返します。fd = os.open('foo.txt', os.O_RONLY)

于 2010-09-19T12:17:46.257 に答える
0

コマンドラインで受け取ったパラメータ(つまり、ソケット)を使用してソケットを再作成する場合は、次を使用します。socket.fromfd

于 2010-09-19T12:19:35.447 に答える