Как запретить отображение консоли при использовании фиктивного интерфейса VLC

#windows #node.js #subprocess #vlc #child-process

#Windows #node.js #подпроцесс #vlc #дочерний процесс

Вопрос:

Я пытаюсь запустить VLC в «фиктивном» режиме из Node.js серверный скрипт, однако при использовании child_process.spawn('vlc',['-I dummy']) создается новое окно консоли для вывода VLC при использовании Windows. Есть ли способ предотвратить это и принудительно выполнить все стандартные настройки через stdout ReadableStream, чтобы не возникало «всплывающих окон»?

РЕДАКТИРОВАТЬ: Эта проблема не имела ничего общего с node.js это был просто способ, которым я его вызывал, и поведение VLC. Решение приведено ниже.

Спасибо.

Комментарии:

1. Я заметил, что -I telnet не выводит консоль, поэтому я буду использовать это вместо.

2. Однако интерфейс telnet бесполезен — я бы предпочел использовать RC-интерфейс, но у него та же проблема, что и у dummy с новым окном — и, что еще хуже, стандартный вывод stdin, похоже, не работает

Ответ №1:

Я нашел решение для конкретной проблемы:

У VLC есть опция командной строки для переопределения этого окна -*-quiet, где * находится интерфейс.

например, для фиктивного интерфейса используйте

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

Для интерфейса rc используйте

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

Ответ №2:

Я хотел бы дополнить ответ Адама M-W.

VLC имеет опцию командной строки для подавления этого окна -*-quiet, где * находится интерфейс.

например, для фиктивного интерфейса используйте

child_process.spawn(‘vlc‘,[‘-I dummy‘, ‘—dummy-quiet‘]) Для интерфейса rc используйте

child_process.spawn(‘vlc‘,[‘-I rc‘, ‘—rc-quiet‘])

ответил 13 ’11 июня в 14:12 Адам М-Ж

по крайней мере, в моей системе VLC теперь отправляет свои сообщения в stdError, так что это канал, который необходимо отслеживать.

Мой интерфейс связан с Qt, QtProcess, и это те опции, которые сработали для меня.

Использование объединенных каналов и чтение стандартного вывода.

 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;
}
  

Использование отдельных каналов и чтение 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;
}
  

Ответ №3:

Может быть, вы могли бы запустить процесс с child_process.spawn('start', ['/b', 'vlc', '-I dummy']) вместо этого?