Ruby プロセスと Python プロセスの間で何らかの通信を行おうとしています。UNIXソケットを使いたい。
目的: Ruby プロセスは Python プロセスを「フォークして実行」します。Ruby プロセスで UNIX ソケット ペアを作成し、Python に渡します。
Ruby コード ( p.rb ):
require 'socket'
r_socket, p_socket = Socket.pair(:UNIX, :DGRAM, 0)
# I was hoping this file descriptor would be available in the child process
pid = Process.spawn('python', 'p.py', p_socket.fileno.to_s)
Process.waitpid(pid)
Python コード ( p.py ):
import sys
import os
import socket
# get the file descriptor from command line
p_fd = int(sys.argv[1])
socket.fromfd(p_fd, socket.AF_UNIX, socket.SOCK_DGRAM)
# f_socket = os.fdopen(p_fd)
# os.write(p_fd, 'h')
コマンドライン:
ruby p.rb
結果:
OSError: [Errno 9] Bad file descriptor
Ruby プロセスがファイル記述子を Python プロセスに渡し、これら 2 つがこれらのソケットを使用してデータを送信できるようになることを期待していました。
だから、私の質問:
1) 上記のように、Ruby と Python のプロセス間でオープン ファイル記述子を渡すことは可能ですか?
2) 2 つのプロセス間でファイル記述子を渡すことができる場合、コードのどこが間違っているのでしょうか。