그래서 Gnome 셸 확장을 만들고 있습니다. 그리고 나는 어떤 명령을 실행할 수 있기를 원한다. 지금까지 수행 첫 번째 줄 내 프로세스를 생성Gnome 셸 확장 : GLib.IOChannel의 stdout
s=GLib.spawn_async_with_pipes(null, ["synclient","-m","100"], null, GLib.SpawnFlags.SEARCH_PATH,null)
c=GLib.IOChannel.unix_new(s[3])
인 것을 그래서
, (이 명령은 실제로 "synclient의 -m 100"이지만, 그 주제 꺼짐). 확실히 일하고 있습니다.
[3]은 프로세스의 stout에 대한 파일 설명자입니다. (파이프와 관련이 있습니다. 파이프 전체에 대해서는 잘 모르겠습니다.)
어쨌든 내 문제는 synclient의 출력에서 아무것도 읽을 수없는 것입니다.
This 내가 참조 용으로 사용하지만 모든 기능이 작동하지 않는 것 같습니다. 예를 들어, add_watch를 사용하고 싶지만, 그놈은 gnome 확장과 함께 apperently 작동하지 않습니다.
나는 묶음을 사용하거나 함수와 특히 read_line_string을 사용해 보았지만 모두 문제가 있습니다. read_line_string 들어, 그것을 제외한 모든 작동해야합니다 StringBuilder 개체를 인수로 전달하는 방법을 알아낼 수없는 것 같습니다.
그래서 누구나 명령의 출력을 얻는 방법을 알고 있습니까?
편집 : 또한 확장 프로그램에서 사용하는 언어에 대해 혼란스러워합니다. 나는 그것이 자바 스크립트라고 생각하지만, 내가 사용하고있는 문서들은 Vala를 생각하게 만드는 것처럼 보인다. (나는 자바의 변형을 추측하고 있는가?).
편집 2 : 그래서
, 내가 지금 뭘 찾았는지는
let [res, pid, in_fd, out_fd, err_fd] =
GLib.spawn_async_with_pipes(
null, ["synclient","-m","100"], null, GLib.SpawnFlags.SEARCH_PATH, null);
out_reader = new Gio.DataInputStream({ base_stream: new Gio.UnixInputStream({fd: out_fd}) });
그리고 라인 읽기 :
let [out, size] = out_reader.read_line(null);
이 나에게 명령의 출력을 제공합니다,하지만 DataInputStream가 변경 될 때마다 콜백을 얻을 수있는 방법이 없다. 스트림에 새로운 라인이있을 때마다 뭔가 할 수 있어야합니다.
그 링크는 많은 도움이됩니다. 'add_watch()'는 그것이 정의되지 않았다고 말하기 때문에 작동하지 않습니다.하지만 잘못했을 수도 있습니다. 어쨌든 나는 약간 다른 방식으로, 내 질문에 편집을 참조하십시오. – Jay
아마도 새로운 질문을 열어야합니다. – ptomato