【问题标题】:Message between bash and JavaScript via named pipes通过命名管道在 bash 和 JavaScript 之间传递消息
【发布时间】:2013-07-24 07:41:54
【问题描述】:

我有一个 JavaScript 应用程序需要启动一个 Linux 应用程序。

由于我没有找到任何方法来启动应用程序并在它结束时获取,所以我制作了一个 bash 脚本来启动应用程序,并在应用程序关闭时通过命名管道发送消息。

到这里为止,一切都很好,但我找不到在 JavaScript 中捕获此消息的方法。

有人知道如何在 JavaScript 中获取消息吗?

我进行了搜索,但我只找到了如何在 C# 和 C++ 中执行此操作。

来自 JavaScript 的示例:

var test = spawn('sh', ['home/pi/play.sh', data.video_id]);

只需生成一个以视频名称启动脚本的 bash 命令

来自 bash 的示例:

mkfifo btjpipe
if pgrep omxplayer
then
    echo "AR">btjpipe
else
    clear
    omxplayer $1 > dev/null
    echo "VE">btjpipe

创建管道,寻找播放器是否已经在运行,然后发送 AR(“已运行”)或启动播放器并发送 VE(“视频结束”)。

【问题讨论】:

  • 您使用的是什么 JavaScript 引擎和环境?节点JS? SilkJS?
  • 我在使用 raspbian(debian for raspberry pi)的树莓派上,在铬上,使用 node.js
  • 我已经添加了nodejs 标签(对于你的问题来说真的很重要)。不知道你所说的“在铬上”是什么意思——如果你使用的是 Raspbian,你没有使用 Chrome OS,我能想到的唯一其他相关的 Chromium 是一个网络浏览器,但你没有这样做一个网络浏览器。
  • 我看到了,我编辑晚了几秒,忘记添加了

标签: javascript node.js bash named-pipes raspbian


【解决方案1】:

使用 child_process 模块和 child.stdout 将输出通过管道传输到您想要的位置

var spawn = require('child_process').spawn;
var test = spawn('sh', ['home/pi/play.sh', data.video_id]);


test.stdin.pipe(process.stdin);
test.stdout.pipe(process.stdout);
test.stderr.pipe(process.stderr);

关于本例到当前进程

也许您也可以尝试使用“exec”而不是 spawn,您将在回调函数中获得输出。

【讨论】:

  • 那么使用 test.stdin.pipe(process.stdin);,如果数据在管道中,它们现在将在测试中?
猜你喜欢
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2015-05-19
  • 2020-01-06
相关资源
最近更新 更多