我正在尝试在我的 ruby 进程和 Python 进程之间进行一些通信;我想使用 UNIX 套接字。
目标:ruby 进程“fork and exec”Python 进程。在 ruby 进程中,创建一个 UNIX 套接字对,并将其传递给 Python。
红宝石代码(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 进程,以便这两个可以使用这些套接字发送数据。
所以,我的问题:
1) 是否可以像上面那样在 ruby 和 python 进程之间传递打开的文件描述符?
2)如果我们可以在两个进程之间传递文件描述符,那么我的代码有什么问题。