루비에 다음과 같은 파이썬 코드를 포팅하려고합니다 :Ruby 용 Python의 pty.fork와 같은 것이 있습니까?
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
터미널과 같은 서브 프로세스를 읽고 써야하기 때문에 커널 대신 루비의 PTY 모듈을 사용해야한다는 것을 이해합니다. .포크. 그러나 동등한 포크 메서드가없는 것 같습니다. 명령을 문자열로 전달해야합니다. 이것은 파이썬의 기능에 가장 가깝습니다.
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 %만이 작동 할 것이라고 확신합니다. 분명히 루비는 뭔가 더 깨끗한가?
중요한 것은 "get_command_based_on_user_input()"이 부모 프로세스를 차단하지 않는다는 것입니다. 이것이 내가 자식 프로세스에 갇힌 이유입니다.
당신은 자식 포크에서 cmd를 얻고, exec하고, 터미널 fids를 메인 포크로 돌려 주길 원합니까? –