传递:冒号到 child_process SPAWN arg

问题描述

我有一个命令

omxplayer /home/pi/videos/9886a3n2545r7i505rzz.mp4 -o alsa:sysdefault

它从命令行运行良好,但如果我将该命令转换为 spawn 命令:

let omxProcess = spawn('omxplayer',['/home/pi/videos/9886a3n2545r7i505rzz.mp4','-o','alsa:sysdefault'])

命令失败(没有任何错误)。

但是如果我运行以下删除 :sysdefault 它运行(但没有 :sysdefault,命令是不一样的,我需要用 :sysdefault 运行它

  let omxProcess = spawn('omxplayer','alsa'])

我认为这与 arg 中有一个“:”有关。

有什么想法吗?

解决方法

由于您没有使用 shell: true 标志,因此几乎可以肯定不是由命令中的 : 引起的。您可以随时验证这一点,只是为了安全起见。

检查环境是否干扰您的参数的一种简单方法是调用另一个二进制文件,例如 echo,而不是 omxplayer。它是否回应了你的论点?冒号还在吗?

二进制文件可能会退出并显示一些错误代码(可能还有错误消息)。要捕获它们,请确保在输出流上注册处理程序,以及应该告诉您退出代码的退出处理程序。这在 child_process 文档中进行了概述,就在 spawn() 下方。适合您的情况:

omxProcess.stdout.on('data',(data) => {
  console.log(`stdout: ${data}`);
});

omxProcess.stderr.on('data',(data) => {
  console.error(`stderr: ${data}`);
});

omxProcess.on('close',(code) => {
  console.log(`child process exited with code ${code}`);
});

根据输出和退出代码,您应该能够调试问题。