0

我有一个命令

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', ['/home/pi/videos/9886a3n2545r7i505rzz.mp4', '-o', 'alsa'])

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

有什么想法吗?

4

1 回答 1

0

由于您没有使用该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}`);
});

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

于 2021-03-24T19:50:12.800 回答