私はCで書いた簡単なWebサーバー(非常に)を持っています。私はstdinでデータを受け取り、stdoutで送信するように書きました。どのように私はsocket.accept()で作成されたソケットの入出力は、subprocess.Popenで作成されたプロセスの入出力に接続するのですか?処理するPython接続ソケット
音はシンプルですね。ここではキラーです:私はWindowsを実行しています。
誰でも手助けできますか?
- をsubprocess.Popenに標準入力/アウトなどのクライアントオブジェクト自体を渡す:
は、ここで私が試したものです。 (試しても痛いことはありません)
- socket.makefile()をstdin/outとしてsubprocess.Popenに渡します。
- ソケットのファイル番号をos.fdopen()に渡します。
はまた、ケースには疑問が不明であった、ここに私のコードのスリムダウンバージョンです:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('', PORT))
sock.listen(5)
cli, addr = sock.accept()
p = subprocess.Popen([PROG])
#I want to connect 'p' to the 'cli' socket so whatever it sends on stdout
#goes to the client and whatever the client sends goes to its stdin.
#I've tried:
p = subprocess.Popen([PROG], stdin = cli.makefile("r"), stdout = cli.makefile("w"))
p = subprocess.Popen([PROG], stdin = cli, stdout = cli)
p = subprocess.Popen([PROG], stdin = os.fdopen(cli.fileno(), "r"), stdout = os.fdopen(cli.fileno(), "w"))
#but all of them give me either "Bad file descriptor" or "The handle is invalid".
[mcve]をお読みください。 – boardrider
私は同じ問題がありましたが、私が思いついた解決策は、ソケットのポートをプロセスの標準に書き込むか、(socketで) 'socket.share'関数を使ってソケットを共有することでした。私はあなたが少なくともこのソリューションを検討すべきだと思います。興味深い。 –