我想用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