Я пытаюсь использовать vala для запуска внешнего приложения с помощью GLib с помощью spawn_command_line_sync(). В соответствии с документацией (http://valadoc.org/#!api=glib-2.0/GLib.Process.spawn_sync) вы можете передать строку для хранения вывода внешнего приложения.Перенаправление вывода внешнего приложения начинается с glib
Хотя это отлично работает при запуске скрипта, который печатает пару строк, мне нужно вызвать программу, которая будет печатать содержимое двоичного файла. (например, «cat/usr/bin/apt-get»)
Есть ли способ получить выход внешней программы не в строке, а в DataStream или что-то в этом роде?
Я планирую написать вывод внешней программы в файл, поэтому просто вызов «cat/usr/bin/apt-get> outputfile» будет альтернативой (не так хорошо), но это не означает, похоже, работает.
В любом случае, я бы предпочел получить какой-то выходной поток. Буду признателен за любую помощь.
Код им с помощью:
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
Возможно, вам захочется использовать GLib.OutputStream.splice (в gio-2.0). – nemequ