2013-08-30 2 views
2

Linux 용 명령을 보내는 웹 애플리케이션을 개발 중입니다. 이 경우 클라이언트의 Javascript/jQuery와 서버의 Node.js를 사용하고 있습니다. 내 코드는 이것이다 :명령 반환 방법?

클라이언트 측

$("#myLink").click(function() { 
    $.get('http://myHost:myPort', {cmd: "rhythmbox-client --print-playing"}); 
}); 

서버 측 (commands.js)

var exec = require('child_process').exec; 
var express = require('express'); 
var app = express(); 

app.get('/commands', function(req, res) { 
    var command = exec(req.query.cmd); 
}); 

app.listen(3000); 

이 작동하고 일반적으로 명령을 실행합니다. 내가 필요한 것은이 명령이 생성하는 리턴 값을 얻는 것입니다. 예를 들어 터미널에서 "rhythmbox-client --print-playing"명령을 실행하면 현재 재생중인 노래의 이름을 반환합니다. 그리고이 응용 프로그램의 HTML 페이지에서이 이름을 사용하고 싶습니다.

명령에 의해 생성 된 리턴을 실행하려면 코드에서 어떻게 변경해야합니까?

당신을 감사 (죄송합니다 내 영어 나쁜)

+1

시도 , 서버에서 some_file을 찾는다. 그런 다음 (1)이 파일을 매번 고유 한 이름으로 만들고 (2) 사용자에게 다시 스트리밍하면됩니다. ** 경고 : 당신은 보안 구멍을 쓰고 있습니다. 낯선 사람들은 RM과 같은 나쁜 것들을 실행할 수도 있고, 쉘에서 기계를 뿌리려고 할 수도 있습니다. – Paul

+1

더 많은 창의적인 아이디어를 얻으려면 reddit에서이 게시물을 참조하십시오. [웹 문제에서 사용자 만들기] – dc5

+0

예 @Paul, 나는 명령을 처리 할 것입니다. (예 : http://www.reddit.com/r/php/comments/1l7baq/) "rm"과 같은 단어를 수신하고 제거합니다. – Agneli

답변

3

은 다음과 같이 명령 출력을 얻기 위해 간부 인하는 콜백 함수를 전달합니다 명령에> some_file 2> & 1 ''추가

var command = exec(req.query.cmd, function(err, stdout, stderr) { 
    res.send(stdout); 
}); 
+0

멋진데. 어떻게 stdout과 stderr를 결합 할 수 있습니까? – Paul

+0

이것이 올바른 방법 인 것으로 보입니다. Firebug에서 결과를 볼 때 나는 HTML이라는 탭이 있지만 비어있는 것을 보았습니다. :( – Agneli

+0

@Agneli 응답 유형에 대한 Express의 문서를 탐색 할 수 있습니다. – hulufei