python数据管道_让python程序通过管道接收数据

本文介绍了如何使Python程序通过命令行管道接收数据,利用sys.stdin读取管道中的内容。在实现过程中,由于sys.stdin.read()默认是阻塞的,所以通过fcntl模块设置为非阻塞模式。提供了一个示例代码展示如何处理这种情况,并展示了运行效果。
摘要由CSDN通过智能技术生成

------------------------程序员的分割线----------------------------------

不是很确定本文的名称是否够准确,我的意思是,我想记录一下如何让python程序能够通过命令行的管道来接收数据,就像我们用管道符号(|)连接多个程序一样,前一个程序的输出对接后一个程序的输入,其中有一个是你的python程序。

管道数据来自stdin,通过sys模块,我们可以访问stdin对象,即sys.stdin。

基本思路是:在程序中读取sys.stdin中的内容,这就是通过管道过来的数据!(其实通过input函数接收的数据,也可以在sys.stdin中读取,不过这是程序的交互过程;而通过管道,是在程序启动的时候,数据就已经准备好了;管道也无法解决程序交互过程的输入)

在写代码验证的时候,遇到了一个小问题:sys.stdin.read()函数默认是阻塞的,而如果程序不结束,就不会出现EOF,程序就在read函数这里死等了。因此,要将read函数设置为非阻塞的方式,用fcntl模块的接口。

整个可运行的代码如下:

$ cat py_stdin.py

import os

import sys

import fcntl

fcntl.fcntl(sys.stdin, fcntl.F_SETFL, os.O_NONBLOCK)

try:

cc = sys.stdin.read()

except TypeError as e:

print('no std input re

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值