我試圖港口一些Python代碼類似下面的紅寶石:有沒有像Python的pty.fork 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
因爲我需要讀取和寫入像一個終端子,我知道我應該使用Ruby的PTY模塊代替Kernel.fork。但它似乎沒有一個等效的分叉方法;我必須以字符串的形式傳遞一個命令。這是我能得到的最接近Python的功能:
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特有的,這很好。顯然有些是僞代碼,但它是我能找到的唯一方法,而且我只有80%確定它能夠正常工作。 Ruby肯定有更清潔的東西?
重要的是,「get_command_based_on_user_input()」不會阻塞父進程,這就是爲什麼我將其卡在子進程中的原因。
你想在子fork中獲得cmd,exec它,然後返回終端fids到主叉? –