gpt4 book ai didi

python - 如何在 Python 中通过管道传输到 os.execv'd 进程的标准输入

转载 作者:行者123 更新时间:2023-11-28 16:37:37 25 4
gpt4 key购买 nike

我想向进程的标准输入写入一些内容替换我当前的 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”。为什么?

最佳答案

os.fork()execvp() 之前执行子进程;然后,父项写入管道,而子项从中读取。父级还必须在 fork() 之后 close() 管道的读取端,而子级必须 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()

关于python - 如何在 Python 中通过管道传输到 os.execv'd 进程的标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com