有没有办法将 Linux 管道设置为非缓冲或行缓冲?

2024-01-02

我的程序正在控制 Linux 上的外部应用程序,通过管道将输入命令传递到外部应用程序 stdin,并通过管道从外部应用程序 stdout 读取输出结果。

问题在于,对管道的写入是按块缓冲的,而不是按行缓冲的,因此在我的应用程序接收外部应用程序输出的数据之前会发生延迟。无法更改外部应用程序以添加显式 fflush() 调用。

当我将外部应用程序设置为/bin/cat -n(它回显输入,并添加行号),看起来它工作正常,cat每行后刷新。强制外部应用程序刷新的唯一方法是发送exit对它发出命令;当它收到命令时,它会刷新,并且所有答案都会在退出之前出现在标准输出上。

我很确定,Unix 管道是这种进程间通信(伪服务器-客户端)的合适解决方案,但也许我错了。

(我刚刚复制了类似问题的一些文字:使用 Python 强制另一个程序的标准输出不被缓冲 https://stackoverflow.com/questions/1544050/force-another-programs-standard-output-to-be-unbuffered-using-python)


不要使用管道。请改用 pty。如果需要的话,Pty(伪 tty)具有行缓冲的优点,这为您的数据流提供了简单的框架。

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

有没有办法将 Linux 管道设置为非缓冲或行缓冲? 的相关文章

随机推荐

  • 统计tableau中某列出现Null的次数

    我对 Tableau 比较陌生 我想知道是否有一种方法可以计算列中的空值 我有一个名为字符串类型的电子邮件的列 想知道有多少人尚未输入他们的电子邮件 即空 我尝试创建一个计算字段 计数 ISNULL 电子邮件 但这给了我总计数而不是空值计数
  • 在golang中为ws创建单元测试

    我使用 gorilla Web 套接字框架并使用以下客户端在本地运行 Web 套接字并进行调试 https github com gorilla websocket https github com gorilla websocket ws
  • Angular-CLI for Angular2如何加载环境变量

    我是 angular cli 的新手 想要通过 env 为我的 api 服务调用加载 url 例如 local http 127 0 0 1 5000 dev http 123 123 123 123 80 prod https 123 1
  • 如何仅在某些模式下启用空白模式

    我正在尝试获取 emacswhitespace mode仅在某些模式下自动启用 根据文档 启用global whitespace mode并设置whitespace global modes变量应该完全做到这一点 但我无法让它正常工作 In
  • 即使导入脚本也找不到 Scrollify 函数

    所以我尝试使用 Scrollify 这是一个用于滚动捕捉的 jQuery 插件 我导入 jQuery 没有问题 但无论我如何导入插件本身 我都会收到错误 Uncaught TypeError scrollify is not a funct
  • 如何在 Azure AD 加入设备上的任务计划程序中选择用户

    如何在已加入 Azure AD 的设备上选择 Azure AD 用户帐户 我刚刚遇到这个问题并使用以下步骤解决了它 在任务计划程序中正常创建任务 在安全选项中选择任何本地用户 将任务导出到 xml 文件 从任务计划程序中删除任务 打开cmd
  • (excel 2013) 带有 VLOOKUP 函数的 3D 公式

    前段时间我在这里问过类似的问题单元格位置相同的 3D 公式 https stackoverflow com questions 25352610 excel 2013 dynamic change of formula depending
  • 非常简单的c ++:fstream中的运算符>>在读取某些内容后是否会删除换行符?

    file in 12 13 main cpp fstream f file in ios in int n char c f gt gt n f get c 提取数字12后 下一个字符是什么 是换行符还是 1 如果我调用 getline 而
  • Android 数据绑定与自定义视图

    The Android 数据绑定指南 http developer android com tools data binding guide html讨论了活动或片段中的绑定值 但是有没有办法使用自定义视图执行数据绑定 我想做这样的事情
  • 使用 OpenSSL.NET 和现有密钥解密 RSA

    我有以下代码使用 OpenSSL Net 生成 OpenSSL RSA 公钥和私钥 但是 我似乎找不到使用给定私钥解密数据的方法 我知道如果我调用生成密钥 然后调用相应的方法来加密和解密数据 它就可以正常工作 但是 如果我尝试从给定公钥的外
  • 找到R中两个数据帧之间的公共ID

    有以下数据框 id1 lt c 1 2 3 4 5 spent lt c 10 20 30 40 50 id2 lt c 1 3 4 x lt c 1 2 2 df1 lt data frame id1 spent df2 lt data
  • MVC 架构和模态对话框窗口

    我正在开发一个MVC架构的项目 它应该是一个管理一些客户的简单应用程序 MainModel MainView 和 MainController 类使主窗口显示客户表的内容并让用户插入 删除或编辑客户 我的问题是插入和编辑按钮应该显示一些对话
  • 将主键int类型更改为serial

    有没有办法在不删除表的情况下将现有主键类型从 int 更改为串行 我表里已经有很多数据了 我不想删除它 将 int 转换为序列或多或少仅意味着向值添加序列默认值 http www postgresql org docs 9 3 static
  • Kubernetes POD 参数未传递到服务,但 Docker 参数正确传递

    问题陈述 我已经成功创建了一个 Docker 镜像docker io joethecoder2 spring boot web 它已经使用命令行参数进行了测试 并且这些参数可以在 Docker 本地正常工作 我正在尝试将传递给 Docker
  • 推送视图应以透明背景显示

    我只是从一种观点推论另一种观点 在此代码之后 推送的视图将显示为透明 我之前已经用过很多次了 就这么简单 settings set settings alloc initWithNibName settings bundle nil set
  • req.body 无法作为数组读取

    我正在使用 node js 接收发布请求 请求正文在使用打印后具有此内容console log object 1 deviceType iPad Retina guid DF1121F9 FE66 4772 BE74 42936F1357F
  • 添加锚点到 RedirectToAction 结果?

    我正在尝试创建一个类似于的扩展方法MVCContrib 的 RedirectToAction 方法 http mvccontrib codeplex com SourceControl changeset view c0a43d6843a7
  • iOS Foundation:系统字体大小

    我想知道iOS应用程序tableView中的systemFontSize是否是always文本标签也一样吗 这是取决于风格 例如当我NSLog f UIFont systemFontSize 我已经14 0了这总是一样的吗 更重要的是 如何
  • 创建具有多个选项的 Python 函数的最佳方法?

    我定义了一堆自定义函数 并发现其中很多包含一些相同或相似的代码块 例如 仅包含略有不同的字符串或参数 所以像这样 def func1 a b c some identical code some similar code more iden
  • 有没有办法将 Linux 管道设置为非缓冲或行缓冲?

    我的程序正在控制 Linux 上的外部应用程序 通过管道将输入命令传递到外部应用程序 stdin 并通过管道从外部应用程序 stdout 读取输出结果 问题在于 对管道的写入是按块缓冲的 而不是按行缓冲的 因此在我的应用程序接收外部应用程序