#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'])
вместо этого?