我想在替换我当前的Python进程的标准输入中写一些东西.是否有捷径可寻?我一直在思考import sys, osr, w = os.pipe()os.write(w, yo)os.dup2(r, sys.stdin.fileno())os.execvp(cat, [])但是当我在OS X中执行...

我想在替换我当前的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()
沃梦达教程
本文标题为:如何在Python中通过管道传输到os.execv进程的stdin


基础教程推荐
猜你喜欢
- python_day26__socke网络编程之subprocess方法_产生在DOS环境下执行的子进程以执行DOS命令符 2023-09-03
- Python并行编程(十一):基于进程的并行 2023-09-03
- Python 使用openpyxl处理Excel文件详情 2022-09-02
- 详解pandas df.iloc[]的典型用法 2022-08-30
- python os.path模块使用方法介绍 2022-09-03
- python初学定义函数 2023-08-09
- Python多线程入门学习 2023-08-04
- 使用Python NumPy库绘制渐变图案 2023-08-04
- linux下安装python3遇到的问题总结 2023-09-04
- python——多线程与多进程 2023-11-10