打开终端,执行命令,进入交互模式

时间:2015-12-06 15:19:00

标签: node.js

我正在写一个家庭自动化网络应用程序。我有音乐从谷歌音乐流到我的扬声器,我用vlc输出声音。我不能做的似乎是远程暂停这首歌。例如,cvlc url将打开并流式传输网址,然后进入交互模式,可以在其中键入暂停状态并暂停。

当我尝试从我的node.js应用程序执行此操作时,没有任何反应。它只是继续发挥。

var terminal = require('child_process').spawn('bash');

terminal.stdout.on('data', function (data) {
    console.log(data);
});

terminal.on('exit', function (code) {
    console.log('child process exited with code ' + code);
});

terminal.stdin.write('cvlc "' + req.url +'" & \n');
terminal.stdin.write('pause');

2 个答案:

答案 0 :(得分:0)

尝试添加' \ n'暂停命令后:

terminal.stdin.write('pause\n');

另外,我对cvlc并不熟悉,但是,如果你在BG中启动它,不确定你是否可以写入它的stdin,因此它可能会忽略所有你的暂停'命令,您是否尝试在没有'&'?

的情况下调用它

另外,为什么要启动bash然后运行cvlc?为什么不:

var terminal = require('child_process').spawn('cvlc');

最后但并非最不重要的是,您确定默认路径是否足够?

答案 1 :(得分:0)

我从未真正通过终端弄清楚这一点。相反,我使用了VLC的http服务器选项,然后获得了控制暂停和播放的请求。

菌种:

  var term = spawn.spawn('cvlc',['-I', 'http',req.url,'localhost:8080']);

暂停:

 var req = http.get('http://:password@localhost:8080/requests/status.xml?command=pl_pause', function (r) {
    r.on('data', function () { /* do nothing */
    });
});

播放:

  var reqd = http.get('http://:password@localhost:8080/requests/status.xml?command=pl_play', function (r) {
        r.on('data', function () { /* do nothing */
        });
        r.on('error', function (err) { /* do nothing */
            console.log(err)
        });
    });

希望能帮助有VLC控制问题的人。我是通过无头的Raspberry Pi做到这一点的。我试图避免为我的扬声器支付Chromecast并成功。