2011-05-14 60 views
2

我试图从Node.js服务器脚本以“虚拟”模式启动VLC,但是使用child_process.spawn('vlc',['-I dummy'])会在使用Windows时为VLC的输出生成新的控制台窗口。有没有办法来防止这种情况发生,并通过标准输出ReadableStream强制所有stdout,所以没有“弹出窗口”发生?如何防止在使用VLC的虚拟接口时显示控制台

编辑:这个问题与node.js无关,它只是我称之为的方式和VLC的行为。解决方案如下。

谢谢。

+0

我注意到,-I Telnet不弹出控制台,所以我会使用它代替。 – 2011-05-14 13:32:30

+0

但是,telnet界面是没用的 - 我宁愿使用RC界面,但是它有与新窗口相同的问题 - 更糟糕的是stdin stdout似乎不起作用 – 2011-05-14 14:15:52

回答

5

我发现的具体问题的解决方案:

VLC有一个命令行选项来surpress此窗口 - * - 安静其中*接口。

例如对于虚拟接口,使用

child_process.spawn('vlc',['-I dummy','--dummy-quiet']) 

对于RC接口,使用

child_process.spawn('vlc',['-I rc','--rc-quiet']) 
0

也许你可以用child_process.spawn('start', ['/b', 'vlc', '-I dummy'])来代替这个过程?

1

我想补充亚当M-WC答案。

VLC有一个命令行选项来抑制这个窗口 - * - quiet其中*是接口。

例如用于虚设接口,使用

child_process.spawn( 'VLC ',[ '-I虚设', '--dummy静音'])为RC 接口,使用

child_process.spawn( 'VLC ',[ '-I RC', '--rc静音'])

回答菊Ñ13 '11在14:12 亚当M-WC

至少在我的系统, VLC现在发送其消息到stdError,所以这是需要被监视的信道。

我的界面是Qt,QtProcess,这些都是为我工作的选项。

使用MergedChannels和阅读STDOUT

m_proc->setProcessChannelMode(QProcess::MergedChannels); 
connect (m_proc,SIGNAL(readyReadStandardOutput()), 
      this, SLOT(readyRead())); 

void ReDirVLC::readyRead(){ 
    if (!m_proc) return; 
    qDebug()<<m_proc->readAllStandardOutput() << endl; 
} 

使用SeparateChannels和阅读stdError

m_proc->setProcessChannelMode(QProcess::SeparateChannels); 
connect (m_proc,SIGNAL(readyReadStandardError()), 
      this, SLOT(readyRead())); 

void ReDirVLC::readyRead(){ 
    if (!m_proc) return; 
    qDebug()<<m_proc->readAllStandardError() << endl; 
} 
相关问题