使用像 bash 管道这样的操作系统进程:发送 STDIN 并获取其 STDOUT

2023-11-22

我正在尝试使用外部过程它读取 STDIN,并写入 STDOUT。

我想在 Elixir 中编写与此等效的内容,而不使用外部库或包装脚本:

$ echo foo | nkf
foo

即发送数据到nkf在 stdin 上,并从返回转换后的结果nkf的标准输出,知道它已经完成了流的处理。

我试图用端口来做到这一点,但问题是单个发送的消息可以在多个接收到的消息中返回,因此无法判断何时到达消息末尾(简化的示例,"foo"实际上是一个完整的文件):

iex(1)> port = Port.open({:spawn, "nkf -u"}, [:binary])
#Port<0.7>
iex(2)> Port.command(port, "foo")
true
iex(3)> flush
{#Port<0.7>, {:data, "fo"}}
{#Port<0.7>, {:data, "o"}}
:ok

如何在 Elixir 中获得与 Ports 相同的 bash 管道行为?


光束当前不提供关闭流的方法to进程并等待流from完成发送的过程。使用端口,关闭端口还将关闭来自外部进程的流,即使该进程尚未完成发送数据。因此,目前不可能仅使用内置功能 - 有必要寻求外部工具的帮助,例如 or erlexec.

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

使用像 bash 管道这样的操作系统进程:发送 STDIN 并获取其 STDOUT 的相关文章

随机推荐

  • 如何以编程方式在 Windows 7 或 Windows Server 2008 上创建 Windows 用户帐户?

    我一直在尝试在 Windows 7 计算机上创建新的本地用户帐户 我使用了 System DirectoryServices DirectoryEntry 类 如here 但它似乎不起作用 这是文章中的代码 static void Main
  • ReactJs this.props.router 未定义

    你好 我正在学习 React js 我遇到了一个问题 当我尝试使用 React Router 更改回主页时 出现以下错误 未捕获的类型错误 无法读取未定义的属性 push 这是我的代码 您可以看到我正在调用导航函数 我的 client js
  • 为什么我的教授使用两个 getchar();? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 为什么我的教授使用两个 getchar 在我们的 C 程序教程结束时 对此 更好的方法 是什么 他正在等待用户输入 以便您可以看到程序的输出 否则它将完成并且输出将不可见 取决于操作系统
  • 使用 matplotlib 绘制 sklearn LinearRegression 输出

    导入文件后 我使用 numpy 将 x values 和 y values 分开 import pandas as pd from sklearn import linear model from matplotlib import pyp
  • 将 pandas 数据帧拆分为 N 个块[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我目前正在尝试将 pandas 数据帧拆分为未知数量的包含每 N 行的块 我尝试过使用 numpy array split 这个函数 但是将数据帧分割成包含未知行数的 N 个块 有没有一种
  • Mono 兼容的依赖注入框架

    Which 依赖注入框架兼容 并经过测试 Mono2 4 2 3 运行时 发行说明 温莎城堡 is
  • Fragment 元素中的 Fragment onClick 方法

    我读了很多关于片段的文章 但我仍然对如何做什么感到困惑 我有一个 MainActivity 它并排显示两个片段 在其中一个片段中 我有一个按钮 并在该按钮的片段布局 XML 中定义 android onClick buttonClicked
  • 使用 wget 递归获取其中包含任意文件的目录

    我有一个 Web 目录 用于存储一些配置文件 我想使用 wget 来提取这些文件并维护它们当前的结构 例如 远程目录如下所示 http mysite com configs vim vim 包含多个文件和目录 我想使用 wget 在客户端上
  • 使用开发依赖项在 Heroku 上部署时尝试从命名空间“Symfony\Bundle\WebProfilerBundle”加载类“WebProfilerBundle”

    我们有一个托管在 Heroku 上的 Symfony 4 3 Web 应用程序 这是一个新的设置我们从未设法让开发模式正常工作 网上有很多类似的问题 但没有一个能解决我们在这里面临的确切症状 该项目是使用命令行创建的 composer cr
  • MySQL InnoDB 数据库恢复

    我必须恢复在 MySQL 5 0 中无意中删除的数据库 通过检查备份文件 我似乎只有 FRM 文件来保存数据库数据 任何人都可以建议这是否是我从备份执行数据库恢复 导入所需的全部内容 或者我还需要提供其他文件来完成此操作吗 frm 文件不是
  • 如何像 Eclipse 一样清理 IntelliJ IDEA 中的项目缓存?

    有时IDE会因为缓存而出现一些错误 在Eclipse中 我们可以使用clean来解决问题 我怎样才能在 IntelliJ 中做到这一点 取决于您正在运行的版本 基本上是一样的 只需转到 File gt 使缓存无效 然后重新启动Intelli
  • 什么是 .exe 文件存根?

    我正在学习如何使用混淆我的程序集 NET反应堆 一种选择是 生成本机 x86 EXE 文件存根 我不明白它的目的 我导入一个程序集 例如 exe 文件 并输出一个经过混淆的 exe 文件 其大小大致相同 如果我检查过 生成本机 x86 文件
  • 在 VS2010 Express 中创建构造函数的代码片段

    VS 2010 Express 版本 适用于 C 中是否有任何现成的代码片段 可以使用选定属性中的参数创建构造函数 当我创建一个新类并编写以下代码时 public class FileDetails public int ID get se
  • 将 C# 控制台应用程序转换为 DLL

    我正在将 Betfair API 从 SOAP 重写为 JSON 并且按照之前的方式开始 将其作为控制台应用程序 然后从任务调度程序或 win 服务中调用 然而现在我被要求用代码做各种不同的工作 我不想为每项工作编写一个控制台应用程序 不同
  • error_code:如何设置和检查errno

    我试图了解在调用设置的 C 函数时应该使用什么类别errno在 Linux 上 我不确定所有可能的错误代码都是由 POSIX 定义的 所以我很想使用system category 但我喜欢稍后在代码中处理通用条件 所以我想做这样的事情 st
  • Flutter 入门屏幕仅一次

    我是 flutter 和 dart 的新手 我正在尝试制作一个带有 3 页的入门屏幕的应用程序 并且当用户已经打开该应用程序一次时 我试图跳过入门屏幕 我见过与共享偏好类似的东西 但我无法使其发挥作用 这是我的入门屏幕 class Onbo
  • 在没有 Maven 或 Gradle 的情况下将 JUnit 5 与 Java 9 结合使用

    说明 我想使用创建一个 JUnit 测试JUnit 5 in 日食 氧气 4 7 1a 此 JUnit 测试应位于名为 Test 的单独 src 文件夹内 然而 由于我是 JUnit 的新手 我遇到了以下问题Java 9 I 不要使用像这样
  • PHP按键值降序对数组进行数字排序[重复]

    这个问题在这里已经有答案了 PHP 中是否有一个选项可以按键值降序对数组进行排序 我知道您可以使用以下命令对键值进行排序ksort 是的krsort fruits array d gt lemon a gt orange b gt bana
  • PySpark:获取数据框中每列的第一个非空值

    我正在处理不同的 SparkDataFrames 其中许多列中有很多 Null 值 我想要得到any one每个列中的非空值 以查看该值是否可以转换为日期时间 我尝试做df na drop first 希望它会删除所有具有空值的行以及剩余的
  • 使用像 bash 管道这样的操作系统进程:发送 STDIN 并获取其 STDOUT

    我正在尝试使用外部过程它读取 STDIN 并写入 STDOUT 我想在 Elixir 中编写与此等效的内容 而不使用外部库或包装脚本 echo foo nkf foo 即发送数据到nkf在 stdin 上 并从返回转换后的结果nkf的标准输