1

我正在使用 node.js 和 express 为我的家庭媒体中心创建一个可以通过浏览器操作的控制器。

我在生成 VLC 进程时遇到了很多麻烦,但奇怪的是,它只有在从节点提示符执行时才有效,而不是在从文件运行时。

这是我测试过的:

在节点命令行/解释器中:require('child_process').spawn('vlc'); 这正如我所料,我可以看到 vlc 窗口打开并在屏幕上持续存在。

如果我采用完全相同的代码行并将其放在另一个文件中(例如 test.js)并从命令行运行它,则没有任何反应node test.js。几秒钟后注销子进程对象会给我这个:

{ _closesNeeded: 3,
  _closesGot: 3,
  signalCode: null,
  exitCode: 1,
  killed: false,
  _internal: null,
  pid: 11837,
  stdin:
   { _handle: null,
     _pendingWriteReqs: 0,
     _flags: 0,
     _connectQueueSize: 0,
     destroyed: true,
     bytesRead: 0,
     bytesWritten: 0,
     allowHalfOpen: undefined,
     writable: false,
     readable: false,
     _connecting: false,
     _connectQueue: null,
     _idleNext: null,
     _idlePrev: null },
  stdout:
   { _handle: null,
     _pendingWriteReqs: 0,
     _flags: 1,
     _connectQueueSize: 0,
     destroyed: true,
     bytesRead: 0,
     bytesWritten: 0,
     allowHalfOpen: undefined,
     writable: false,
     readable: false,
     _events: { close: [Function] },
     _connecting: false,
     _connectQueue: null,
     _idleNext: null,
     _idlePrev: null },
  stderr:
   { _handle: null,
     _pendingWriteReqs: 0,
     _flags: 1,
     _connectQueueSize: 0,
     destroyed: true,
     bytesRead: 215,
     bytesWritten: 0,
     allowHalfOpen: undefined,
     writable: false,
     readable: false,
     _events: { close: [Function] },
     _connecting: false,
     _connectQueue: null,
     _idleNext: null,
     _idlePrev: null } }

对此特别奇怪的是,我可以以相同的方式启动其他程序并且它可以工作。例如,用“gedit”替换“vlc”会导致文本编辑器完全按预期显示。

有人知道这可能是什么吗?

4

1 回答 1

2

这只是一种预感,但我敢打赌,在 VLC 进程甚至可以说“运行”之前,你就过早地退出了测试。

像这样执行它:

var spawn = require('child_process').spawn;
var vlc = spawn('vlc');
vlc.on('exit', function(code){
  console.log('Exit code: ' + code); 
  //EXIT TEST HERE
});

生成文档。

编辑: 刚刚看到'test.js'并认为你正在运行测试。发布您的 Express 代码的相关部分。

于 2012-07-20T16:10:53.663 回答