如何在Python中通过管道传输到os.execv进程的stdin
作者:互联网
我想在替换我当前的Python进程的标准输入中写一些东西.是否有捷径可寻?我一直在思考
import sys, os
r, w = os.pipe()
os.write(w, 'yo')
os.dup2(r, sys.stdin.fileno())
os.execvp('cat', [''])
但是当我在OS X中执行此操作时,cat会挂起,尽管会显示’yo’.为什么?
解决方法:
您在execvp()-子进程之前对进程进行os.fork();然后,父级将写入管道,而子级则从管道读取数据.父级也必须在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()
标签:operating-system,python 来源: https://codeday.me/bug/20191121/2053826.html