我有以下代码片段:
job1 = fork do
ret = `some_bash_script_running_python_fabric_task`
end
Process.detach(job1)
此代码旨在守护进程,因此当子进程在后台运行时父进程退出。
我得到一个python异常,说明termios.error: (5, 'Input/output error')
。
我发现避免父进程退出修复了这种情况,如下所示:
job1 = fork do
ret = `some_bash_script_running_python_fabric_task`
end
sleep 30
有人可以帮忙吗? 提前致谢
答案 0 :(得分:0)
原来是将stdin从父进程重定向到子进程。
见下文:
Perl's backticks/system giving "tcsetattr: Input/output error"
Access STDIN of child process without capturing STDOUT or STDERR
这是解决方案:
read_io, write_io = IO.pipe
job1 = fork do
write_io.close
STDIN.reopen(read_io)
puts `fab example`
end
Process.detach(job1)
read_io.close
write_io.close