我想写一些进程替换当前Python进程的stdin。是否有捷径可寻?
我正在思考import sys, os
r, w = os.pipe()
os.write(w, 'yo')
os.dup2(r, sys.stdin.fileno())
os.execvp('cat', [''])
但是当我在OS X中执行此操作时,cat会挂起,但是#哟'确实显示出来。为什么呢?
答案 0 :(得分:3)
os.fork()
execvp()
子进程之前的进程; {}然后父进程在子进程读取时写入管道。在close()
之后,父级还必须fork()
管道的读取端,并且孩子必须dup2()
将读取结束到stdin
,然后关闭两个原始管道手柄execvp()
。这是非常标准的Unix管道。
例如:
r, w = os.pipe()
if os.fork() == 0:
# Child process
os.dup2(r, sys.stdin.fileno())
os.close(r)
os.close(w)
os.execvp(...)
else:
# Parent process
os.close(r)
os.write(w, 'yo')
...
os.close(w) # When done writing
os.wait()