python管道pipe

1.什么是管道
Linux进程间通信方式的一种,管道有两端,读端和写端。创建管道,然后从父进程fork出子进程,
父进程和子进程拥有共同的读写文件描述符,可以实现子进程写文件,父进程读文件的操作。
示意图如下:
300946-20171126173021468-547066071.png

2.具体操作
子进程关闭读端,父进程关闭写端,子进程负责写,父进程负责读。
代码示例如下:

import os, time, sys
pipe_name = 'pipe_test'

def child( ):
    pipeout = os.open(pipe_name, os.O_WRONLY)
    counter = 0
    while True:
        time.sleep(1)
        os.write(pipeout, 'Number %03d\n' % counter)
        counter = (counter+1) % 5

def parent( ):
    pipein = open(pipe_name, 'r')
    while True:
        line = pipein.readline()[:-1]
        print 'Parent %d got "%s" at %s' % (os.getpid(), line, time.time( ))

if not os.path.exists(pipe_name):
    os.mkfifo(pipe_name)  
pid = os.fork()    
if pid != 0:
    parent()
else:       
    child()

运行结果:
300946-20171126173001546-926408339.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的“broken pipe”指的是在向已关闭的管道pipe)写入数据时发生的错误。这通常是由于管道的另一端已经关闭,而当前进程仍然试图向其写入数据所致。这种错误通常会导致程序崩溃或异常退出。要避免这种错误,可以在写入数据之前检查管道是否已关闭,或者在写入数据时捕获异常并进行处理。 ### 回答2: Python的"broken pipe"指的是在使用管道进行进程间通信时,管道的另一端已经关闭或不再可用,而导致写入数据失败的错误。 当一个进程通过管道与另一个进程交互时,如果写入数据的一端已经关闭,而另一端还尝试写入数据,就会抛出"broken pipe"错误。这种情况常发生在管道的读取进程意外退出或有异常导致被中断的情况下。 例如,在使用subprocess模块执行外部命令时,将命令的输出通过管道传递给其他进程处理,如果接收输出的进程异常退出或关闭了,写入数据的进程就会抛出"broken pipe"错误。 为了避免这个错误,我们可以在写入数据之前先检查管道的状态,确保另一端仍然可用。可以使用fcntl模块的fcntl函数来设置管道的文件状态标志,或者使用signal模块的signal函数捕获SIGPIPE信号。 另外,还可以使用try-except语句来捕获"broken pipe"异常,并进行相应的处理,例如重新建立管道连接或者正确处理异常退出的情况。 总之,当我们在Python中遇到"broken pipe"错误时,说明写入数据的一端已经关闭或不再可用。我们可以通过合适的处理方法来避免或处理这个错误,以确保程序的正常运行。 ### 回答3: "Python broken pipe" 是指在使用Python编程时遇到的一个错误。这个错误通常发生在一个进程试图向另一个进程发送数据时,而接收数据的进程已经终止或关闭。这时就会出现"broken pipe"错误,表示数据无法成功传递到目标进程。 造成"broken pipe"错误的原因有多种可能。最常见的情况是,发送数据的进程在写入数据之前,目标进程已经关闭了,或者被操作系统中断了。当发送数据的进程试图向目标进程的管道写入数据时,由于目标进程已经终止或关闭,再次写入数据就会导致"broken pipe"错误。 解决"broken pipe"错误的方法有几种。首先,可以在发送数据之前,检查目标进程是否还在运行。如果目标进程已经关闭,可以避免尝试写入数据,从而避免出现错误。其次,可以使用异常处理机制来捕获"broken pipe"错误,并根据需要进行相应的处理。此外,还可以使用一些库或工具来处理进程间通信,以避免出现这种错误。 总的来说,"python broken pipe"是一个在使用Python编程时可能遇到的错误,通常发生在进程间通信过程中,当发送数据的进程尝试写入数据到已经关闭或终止的目标进程时产生。通过合适的检查和异常处理机制,可以有效地解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值