有没有像Python的Ruby的pty.fork?

我试图把一些像下面这样的Python代码移植到Ruby中:

import pty pid, fd = pty.fork if pid == 0: # figure out what to launch cmd = get_command_based_on_user_input() # now replace the forked process with the command os.exec(cmd) else: # read and write to fd like a terminal 

因为我需要像terminal一样读写subprocess,所以我知道我应该使用Ruby的PTY模块来代替Kernel.fork。 但它似乎没有一个等效的分叉方法; 我必须以string的forms传递一个命令。 这是我能得到的最接近Python的function:

 require 'pty' # The Ruby executable, ready to execute some codes RUBY = %Q|/proc/#{Process.id}/exe -e "%s"| # A small Ruby program which will eventually replace itself with another program. Very meta. cmd = "cmd=get_command_based_on_user_input(); exec(cmd)" r, w, pid = PTY.spawn(RUBY % cmd) # Read and write from r and w 

显然,其中一些是Linux特有的,这很好。 显然有些是伪代码,但这是我能find的唯一方法,而且我只有80%确定它能够正常工作。 Ruby肯定有更清洁的东西?

重要的是,“get_command_based_on_user_input()”不会阻塞父进程,这就是为什么我把它放在subprocess中。

您可能正在寻找http://ruby-doc.org/stdlib-1.9.2/libdoc/pty/rdoc/PTY.html,http://www.ruby-doc.org/core-1.9.3/ Process.html#method-c-fork并在Ruby中用双叉创建一个守护进程 。

我打开一个PTY与主进程,叉和重新附加孩子说STDIN.reopen PTY。