Asyn c считывает результаты подпроцесса stdin / stderr в строки в Vala - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь прочитать stdin и stderr в строки из подпроцесса. Я запрашиваю канал, и код выхода равен 0 (успех), но строки пусты.

string errStr = "";
string outStr = "";

string[] cmd = {
    "grep",
    "--help"
};

var grep = new Subprocess.newv(cmd, 
    SubprocessFlags.STDOUT_PIPE|SubprocessFlags.STDERR_PIPE);
yield grep.wait_async();

int exit_code = grep.get_exit_status();

size_t bytes;
yield grep.get_stderr_pipe().read_all_async(errStr.data, 0, null, out bytes);
yield grep.get_stdout_pipe().read_all_async(outStr.data, 0, null, out bytes);

Почему из InputStream ничего не читается в строки (outStr, errStr)?

1 Ответ

0 голосов
/ 28 февраля 2020

Подход не работает, так как string.data не предназначен для использования таким способом. Вместо этого следует использовать DataInputStream, который обеспечивает такие функции, как read_line(). См. подробности здесь .

var dis = new DataInputStream(grep.get_stdout_pipe());

В моем случае мне также требуется контроль над средой подпроцесса, поэтому в таком случае вам придется использовать GLib.Process.spawn_async_with_pipes() вместо Subprocess. См. подробности здесь .

...