2011-05-14 58 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; 
} 
相關問題