来自子进程的大数据块的 pexpect 超时

2024-04-10

我正在使用 pexpect 调用另一个提示输入 raw_input 的 python 脚本 (py27)。我试图围绕这个脚本构建一个 GUI 包装器而不修改它。

我遇到的问题是,我调用的脚本在下一个命令提示符之前执行时返回了大量数据(例如 10KB)。我知道 pexpect 难以处理大量数据。这child.expect无论我传递什么值,调用总是会超时。如何处理大数据集?我已经学会了通过手动读取来管理此问题的方法child.expect.read(X),但这很hacky。正在进行某种缓冲,我不知道如何干净地解决它。脚本返回的数据不会被丢弃,需要进行解析,因此我不能让线程始终读取,除非它可以以某种方式写入文件。

EDIT:

这是一个例子。我使用的是 Windows 10 并使用 Py2.7

test2.py(可以修改此脚本,但不能修改test1.py)

import pexpect
from pexpect import popen_spawn
import time

child = pexpect.popen_spawn.PopenSpawn("python test1.py", maxread=1)
# send hello to child
child.sendline("hello")
# wait for command prompt ">"
child.expect(">", timeout=30)

test1.py(模拟我的真实脚本的行为,在开始时打印一大块数据,在命令完成时返回“>”作为提示,无法修改此脚本)

import sys

# print a bunch of data
for i in range(2000):
    print(i)

try:
    while True:
        # ask for input
        x = raw_input(">")

except KeyboardInterrupt:
    sys.exit("Manually quit")

回溯(最近一次调用最后一次): 文件“test2.py”,第 23 行,位于 child.expect(">", 超时=10) 文件“C:************ \ AppData \ Local \ conda \ conda \ envs \ py27 \ lib \ site-packages \ pexpect \ spawnbase.py”,第327行,在expect中 超时、searchwindowsize、async_) 文件“C:************ \ AppData \ Local \ conda \ conda \ envs \ py27 \ lib \ site-packages \ pexpect \ spawnbase.py”,第355行,在expect_list中 返回exp.expect_loop(超时) 文件“C:************ \ AppData \ Local \ conda \ conda \ envs \ py27 \ lib \ site-packages \ pexpect \ Expect.py”,第106行,在expect_loop中 返回 self.timeout(e) 文件“C:************\AppData\Local\conda\conda\envs\py27\lib\site-packages\pexpect\expect.py”,第 70 行,超时 引发超时(消息) pexpect.exceptions.TIMEOUT: 搜索者: searcher_re: 0: 重新编译(">") 搜索者: searcher_re: 0: 重新编译(">")


如果您确定提示肯定会出现,并且您的场景可以永远等待,那么在预期中使用 timeout=None 将无限期地等待提示出现。 但无限期等待也会带来负面后果。 我建议仅当 100% 确定会出现提示并且无限期等待不是问题时才使用此方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自子进程的大数据块的 pexpect 超时 的相关文章

  • 如何从 Python 返回 JSON 值?

    我从如下所示的 jQuery 文件发送 ajax 请求 该请求需要 JSON 格式的响应 jQuery ajax url Control getImageDetails file id currentId type GET contentT
  • Cython 函数中的字符串

    我想这样做将字符串传递给 Cython 代码 test py s Bonjour myfunc s test pyx def myfunc char mystr cdef int i for i in range len mystr err
  • 合并数据框中的值以写入 Excel

    我有一个看起来像的数据框 column1 column2 column3 colum4 column5 1 r n 1 r s 1 r n 2 r s 3 r n 3 2 r n 1 r s 1 r n 4 r s 4 r n 5 3 r
  • Python Pandas 从宽到长的格式更改以及列标题拆分

    我有一个包含以下列标题和行示例的表 Subject Test1 Result1 Test1 Result2 Test2 Result1 Test2 Result2 0 John 10 0 5 20 0 3 我想将其改造成 Subject l
  • 如何使用 boto3 从 AWS Cognito 获取经过身份验证的身份响应

    我想使用 boto3 获取访问 AWS 服务的临时凭证 用例是这样的 我的 Cognito 用户池中的用户登录到我的服务器 我希望服务器代码为该用户提供访问其他 AWS 服务的临时凭证 我有一个存储我的用户的 Cognito 用户池 我有一
  • 如何充分释放函数中使用的GPU内存

    我在用着cupy在接收一个函数numpy数组 将其推到 GPU 上 对其进行一些操作并返回cp asnumpy它的副本 问题 函数执行后内存没有被释放 如ndidia smi 我知道内存的缓存和重用cupy 但是 这似乎仅适用于每个用户 当
  • 使用Python进行图像识别[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个想法 就是我想识别图像中的字母 可能是 bmp或 jpg 例如 这是一个包含字母 S 的 bmp 图像 我想做的是使用Pyth
  • 比较两个文本文件并计算差异

    我一直在尝试在Python中比较两个文本文件 本质上我想打开它们并一次比较一个字符 如果字符不同 则向计数器添加1 然后显示该值 这是我到目前为止所拥有的 usr bin env python diff 0 import random im
  • Python代码执行时自动打开浏览器

    我正在 Python Flask 中实现 GUI Flask 的设计方式是 必须 手动 打开本地主机以及端口号 有没有一种方法可以使其自动化 以便在运行代码时自动打开浏览器 本地主机 我尝试使用 webbrowser 包 但它在会话终止后打
  • 如何将一串Python代码编译成一个可以调用函数的模块?

    在 Python 中 我有一串 Python 源代码 其中包含以下函数 mySrc def foo print foo def bar print bar 我想将这个字符串编译成某种形式类似模块的对象这样我就可以调用代码中包含的函数 这是我
  • 将查询参数添加到 URL

    我正在尝试自动从网站下载数据 我需要将动态参数传递到每天更改的站点 html 的结构是表格而不是表单 如何传递参数并从 url 获取结果 这是我尝试过的 它需要在 python 2 7 中 import urllib url https d
  • 如何将 pip 指向 Mercurial 分支?

    我正在尝试通过 pip 将我的应用程序安装到 virtualenv 进行测试 安装时效果很好default or tip像这样 pip install e hg https email protected cdn cgi l email p
  • PyPI 上的轮子平台约束有什么限制吗?

    是否有任何地方 PEP 或其他地方 声明关于 Linux 轮子上传范围的限制 PyPI http pypi io 应该有 具体来说 上传是否被认为是可接受的做法linux x86 64轮子到 PyPI 而不是manylinux1 x86 6
  • 如何在 Python 中将 EXR 文件的 float16 转换为 uint8

    我正在使用 OpenEXR 读取 Python 中的 EXR 文件 我有带有半数据 float16 的 R G 和 B 通道 我尝试使用 Numpy 将数据从 float16 转换为 uint8 0 255 颜色 但没有成功 rCh get
  • 在Python中确定句子中2个单词之间的邻近度

    我需要确定 Python 句子中两个单词之间的接近度 例如 在下面的句子中 the foo and the bar is foo bar 我想确定单词之间的距离foo and bar 确定之间出现的单词数foo and bar 请注意 该词
  • 如何让 Python 找到 ffprobe?

    I have ffmpeg and ffprobe安装在我的 mac macOS Sierra 上 并且我已将它们的路径添加到 PATH 中 我可以从终端运行它们 我正在尝试使用ffprobe使用以下代码获取视频文件的宽度和高度 impor
  • 无法在 Windows 服务器上使 SVN 预提交脚本失败

    我正在编写一个 SVN pre commit bat 文件 该文件调用 Python 脚本来查询我们的问题跟踪系统 以确定用户提供的问题跟踪 ID 是否处于正确的状态 例如 打开 状态 并与正确的关联项目 SVN 服务器运行 Windows
  • 在哪里可以找到Python内置序列类型的时间和空间复杂度

    我一直无法找到此信息的来源 无法亲自查看 Python 源代码来确定这些对象是如何工作的 有谁知道我可以在网上找到这个吗 结帐时间复杂度 http wiki python org moin TimeComplexitypy dot org
  • Matplotlib 渲染日期、图像的问题

    我在使用 conda forge 的 Matplotlib v 3 1 3 和 python 3 7 时遇到问题 我拥有 Matplotlib 所需的所有依赖项 当我输入这段代码时 它应该可以工作 我得到了泼溅艺术 它基于此 YouTube
  • Chrome + 另一个进程:进程间通信比 HTTP/XHR 请求更快?

    我有一个进程 1 对视频流进行实时图像处理 我需要在 Chrome 中的 HTML 页面中渲染该视频 同一台计算机上的进程 2 在canvas or img or videoHTML5 元素 由于我有 1000x1000 像素 x 3 字节

随机推荐