我想用vala來啓動一個外部應用程序,使用GLib和spawn_command_line_sync()。 根據文檔(http://valadoc.org/#!api=glib-2.0/GLib.Process.spawn_sync),您可以傳遞一個字符串來存儲外部應用程序的輸出。重定向輸出以glib開頭的外部應用程序
雖然這工作正常,當啓動腳本打印幾行,我需要調用一個程序,將打印二進制文件的內容。我有什麼辦法可以接收外部程序的輸出不是在一個字符串,但在一個DataStream或類似的東西?有沒有什麼辦法可以接收外部程序的輸出不是在一個字符串,但在一個DataStream或類似的東西?我打算把外部程序的輸出寫到一個文件中,所以只需調用「cat/usr/bin/apt-get> outputfile」就可以替代(不是很好),但它不會「 t似乎工作。
無論如何,我寧願它得到某種輸出流。 我將不勝感激任何幫助。使用
代碼IM:
using GLib;
static void main(string[] args) {
string execute = "cat /usr/bin/apt-get";
string output = "out";
try {
GLib.Process.spawn_command_line_sync(execute, out output);
} catch (SpawnError e) {
stderr.printf("spawn error!");
stderr.printf(e.message);
}
stdout.printf("Output: %s\n", output);
}
無可厚非,但你應該叫'waitpid'或添加一個'ChildWatch'到您的主循環,這樣就可以收集你的孩子的存在狀態。如果沒有,它會變成殭屍,直到你退出並且它被'init'重新獲得並收割。 – apmasell 2013-02-10 23:15:27
您可能需要考慮使用GLib.OutputStream.splice(在gio-2.0中)。 – nemequ 2013-02-10 23:18:57