Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取python中的subprocess.PIPE?

读取python中的subprocess.PIPE?

提问于 2017-12-21 02:30:14
回答 2关注 0查看 2.2K

我正在使用子进程模块来启动一个子进程并连接到它的输出流(标准输出)。我想能够在其stdout上执行非阻塞读取。有没有办法让.readline非阻塞或在我调用之前检查流上是否有数据.readline?我希望这是可移植的,或者至少在Windows和Linux下工作。

这里是我现在怎么做(.readline如果没有数据是可用的,它是阻塞的):

代码语言:txt
AI代码解释
复制
p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE)
代码语言:txt
AI代码解释
复制
output_str = p.stdout.readline()

回答 2

以往V

发布于 2017-12-21 03:15:21

经常遇到类似的问题,我经常编写的Python程序需要能够执行一些主要功能,同时接受来自命令行(stdin)的用户输入。简单地把用户输入处理功能放在另一个线程中并不能解决问题,因为readline()块没有超时。如果主要功能已经完成,并且不再需要等待进一步的用户输入,我通常希望我的程序退出,但是它不能因为readline()在另一个线程中等待一条线路而阻塞。我发现这个问题的一个解决办法是使stdin成为一个非阻塞的文件,使用fcntl模块:

代码语言:txt
AI代码解释
复制
import fcntl
代码语言:txt
AI代码解释
复制
import os
代码语言:txt
AI代码解释
复制
import sys
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
# make stdin a non-blocking file
代码语言:txt
AI代码解释
复制
fd = sys.stdin.fileno()
代码语言:txt
AI代码解释
复制
fl = fcntl.fcntl(fd, fcntl.F_GETFL)
代码语言:txt
AI代码解释
复制
fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
# user input handling thread
代码语言:txt
AI代码解释
复制
while mainThreadIsRunning:
代码语言:txt
AI代码解释
复制
      try: input = sys.stdin.readline()
代码语言:txt
AI代码解释
复制
      except: continue
代码语言:txt
AI代码解释
复制
      handleInput(input)

在我看来,这比使用选择或信号模块来解决这个问题稍微清洁一些,但它只能在UNIX上工作...

心愿

发布于 2017-12-21 03:15:07

无论操作系统如何,无阻塞地读取流的可靠方法是使用Queue.get_nowait():

代码语言:txt
AI代码解释
复制
import sys
代码语言:txt
AI代码解释
复制
from subprocess import PIPE, Popen
代码语言:txt
AI代码解释
复制
from threading  import Thread
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
try:
代码语言:txt
AI代码解释
复制
    from Queue import Queue, Empty
代码语言:txt
AI代码解释
复制
except ImportError:
代码语言:txt
AI代码解释
复制
    from queue import Queue, Empty  # python 3.x
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
ON_POSIX = 'posix' in sys.builtin_module_names
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
def enqueue_output(out, queue):
代码语言:txt
AI代码解释
复制
    for line in iter(out.readline, b''):
代码语言:txt
AI代码解释
复制
        queue.put(line)
代码语言:txt
AI代码解释
复制
    out.close()
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
p = Popen(['myprogram.exe'], stdout=PIPE, bufsize=1, close_fds=ON_POSIX)
代码语言:txt
AI代码解释
复制
q = Queue()
代码语言:txt
AI代码解释
复制
t = Thread(target=enqueue_output, args=(p.stdout, q))
代码语言:txt
AI代码解释
复制
t.daemon = True # thread dies with the program
代码语言:txt
AI代码解释
复制
t.start()
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
# ... do other things here
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
# read line without blocking
代码语言:txt
AI代码解释
复制
try:  line = q.get_nowait() # or q.get(timeout=.1)
代码语言:txt
AI代码解释
复制
except Empty:
代码语言:txt
AI代码解释
复制
    print('no output yet')
代码语言:txt
AI代码解释
复制
else: # got line
代码语言:txt
AI代码解释
复制
    # ... do something with line
和开发者交流更多问题细节吧,去 写回答
相关文章
python读取excel中的数据
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
2.1K0
python 读取excel中的数据
http://download.csdn.net/detail/qianminming/2026756#comment
py3study
2020/01/14
2.4K0
通过Python读取elasticsearch中的数据
在前面的分享《通过Python将监控数据由influxdb写入到MySQL》一文中,主要介绍了influxdb-->MySQL。InfluxDB主要存储的由telegraf收集的DB性能数据,此外还有资源、主从、集群等数据。而 Server Log、DB Log(Error Log 和 Slow Log)则是通过filebeat 和 Logstash收集、过滤保存到elasticsearch中。所以,有必要实现通过Python读取elasticsearch中的数据(写入到MySQL)的功能。
东山絮柳仔
2021/05/26
1.8K0
Python 逐行读取socket中的数
网上找到一个简单的用法: socket.makefile().readline()
py3study
2020/01/15
1.7K0
python中读取文件的read、rea
 #读取文件所有内容,返回字符串对象,python默认以文本方式读取文件,遇到结束符读取结束。
py3study
2020/01/20
2K0
python读取txt文件中的数组
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139543.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/23
4.8K0
python读取txt文件中的json数据
txt文本文件能存储各式各样数据,结构化的二维表、半结构化的json,非结构化的纯文本。 存储在excel、csv文件中的二维表,都是可以直接存储在txt文件中的。
全栈程序员站长
2022/08/30
8.2K0
python读取txt文件中的json数据
Python读取结果写入Excel中
列表嵌套字典。Excel中的url,test_method,data,title等都是一个键,url,test_method,data,title下面的数据就是要取的值,也就是Key和value的形式。
清菡
2020/12/02
2.5K0
Python读取结果写入Excel中
【Python基础】Python中读取图片的6种方式
Python进行图片处理,第一步就是读取图片,这里给大家整理了6种图片的读取方式,并将读取的图片装换成numpy.ndarray()格式。首先需要准备一张照片,假如你有女朋友的话,可以用女朋友的,没有的话,那还学啥Python,赶紧找对象去吧!
黄博的机器学习圈子
2020/11/09
7.7K0
【Python基础】Python中读取图片的6种方式
Python读取邮箱中的邮件,含文本,附
#-*- encoding: utf-8 -*- import sys import locale import poplib from email import parser import email import string # 确定运行环境的encoding __g_codeset = sys.getdefaultencoding() if "ascii"==__g_codeset: __g_codeset = locale.getdefaultlocale()[1] # def obj
py3study
2020/01/08
2.4K0
如何使用python读取txt文件中的数据
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139037.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/02
8.1K0
关于Python读取文件的路径中斜杠问题
最近用Python读取文件,发现有时候用 '\' 会报错,换成 '\\' 就不会报错。查了下资料发现,'\'是Python的转义字符,如果路径中存在'\t'或者'\r'这样的特殊字符,'\'就无法起到目录跳转的作用,因此报错。解决办法就是告诉系统'\'不是转义字符,'\\'就起这种作用,现给出一个示例。
py3study
2020/01/14
5.2K0
Python中,关于读取文件编码解码的问
UnicodeDecodeError: 'gbk' codec can't decode byte 0xb1 in position 94: illegal multibyte sequence
py3study
2020/01/15
2K0
Python Numpy 从文件中读取数据
测试文件内容(test1.txt) hello,123,nihao 8,9,10 io,he,no 测试代码 import numpy # dtype:默认读取数据类型,delimiter:分隔符 world_alcohol = numpy.genfromtxt("test1.txt", dtype=str, delimiter=",") # 数据结构 print(type(world_alcohol)) # 数据内容 print(world_alcohol) # 帮助文档 print(help(nump
山海散人
2021/03/03
5.1K0
如何在 Python 中读取 .data 文件?
在本文中,我们将学习什么是 .data 文件以及如何在 python 中读取 .data 文件。
很酷的站长
2023/02/22
6.8K0
如何在 Python 中读取 .data 文件?
Python 文件的读取
文件的读取 文件操作的模式之读取 模式 介绍 r 读取文件 rb 二进制形式读取文件 文件对象的操作模式之读 方法名 参数 介绍 举例 read(seed) 无 返回整个文件字符串 f.read() readlines 无 返回文件列表 f.readlines() readline 无 返回文件中的一行 f.readline() mode 无 文件模式 f.mode name 无 返回文件名称 f.name closed 无 文件是否关闭 f.closed 操作完成后,必须使用close方法!! wit
Zkeq
2022/05/18
9230
python读取pkl_Python 读取文件
inf=cPickle.load(open(‘subj0.pkl’,”rb”))
全栈程序员站长
2022/09/30
1.9K0
python txt读取_python读取本地文件
以下代码为 1:新建onefile.txt文件 2:向onefile.txt文件中写入数据 3:尝试读取新建文件的所有数据 4:尝试读取该文件指定数据 5:拷贝onefile.txt至新建twofile.txt文件,并且统计行数与字节长度
全栈程序员站长
2022/11/10
5K0
python txt读取_python读取本地文件
点击加载更多

相似问题

读取CSV文件并返回Python中的data.framework

2140

如何从Python的输入读取数据的?

2489

python读取数据库转成json格式问题?

0150

你好 python编写微博爬虫可以读取访客cookie吗?

1180

读取文档目录中的.txt文件

2438
相关问答用户
某公司 | 程序员擅长1个领域
腾讯云TDP | 先锋会员擅长2个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档