Python | os.pipe2 函数
Lasted 2020-12-11 10:13:11
os.pipe2 函数创建带有 flags 标志位的管道。可通过对以下一个或多个值进行“或”运算来构造这些 flags:O_NONBLOCK、O_CLOEXEC。返回一对分别用于读取和写入的文件描述符 (r, w)。
管道是一种将信息从一个进程传递到另一个进程的方法。它仅提供单向通信,并且传递的信息由系统保留,直到被接收过程读取为止。
这个概念是由道格拉斯·麦克罗伊为 Unix 命令行发明的,因与物理上的管道相似而得名。
功能跟 os.pipe() 函数类似。由于 O_NONBLOCK、O_CLOEXEC 参数只能在 Unix 下可用,该函数也只能在 Unix 系统中使用。
函数定义
os.pipe2(flags)
# 函数定义
if sys.platform != 'win32':
# Unix only
...
def pipe2(flags: int) -> Tuple[int, int]: ... # some flavors of Unix
...
兼容性:Unix 系统。
参数
- checkflags - 标志位,os.O_NONBLOCK、os.O_CLOEXEC 值可以单独使用,也可进行 | 异或操作。
返回值
- checkTuple[int, int] - 读和写文件描述符。
示例1: - 使用 os.pipe2() 函数创建非阻塞模式管道进行读写。
# coding=utf-8
# Python3 代码
# 讲解怎样使用 os.pipe2() 函数创建非阻塞模式管道
# 引入 os 库
import os
# 使用 os.O_NONBLOCK 参数
# 创建一个非阻塞模式管道
flags = os.O_NONBLOCK
r, w = os.pipe2(flags)
# 创建一个子进程
# 父进程用于读,子进程用于写
pid = os.fork()
if pid > 0:
# 父进程
# 关闭读文件
os.close(r)
# 写入数据
print("Parent process is writing")
text = b"Hello child process"
os.write(w, text)
print("Written text:", text.decode())
else:
# 子进程
# 关闭读文件
os.close(w)
# 读取父进程数据
print("\nChild Process is reading")
r = os.fdopen(r)
print("Read text:", r.read())
Parent process is writing Written text: Hello child process Child Process is reading Read text: Hello child process