首页 > 解决方案 > 如何使用 vala/glib 通过管道传输到进程

问题描述

我正在尝试使用 GLib 的spawn_command_line_sync方法将 echo 的输出通过管道传输到命令中。我遇到的问题是 echo 将整个命令解释为参数。

为了更好地解释,我在我的代码中运行它:

string command = "echo \"" + some_var + "\" | command";
Process.spawn_command_line_sync (command.escape (), 
                                 out r, out e, out s);

我希望将变量回显到管道,并且命令使用管道传输的数据运行,但是当我检查结果时,它只是在回显之后回显所有内容,如下所示:

"some_var's value" | command

我想我可以只使用Posix该类来运行命令,但我喜欢让结果、错误和状态值来收听该spawn_command_line_sync方法提供的值。

标签: glibvalaelementary

解决方案


问题是您为本质上是内核的exec()系统调用提供了 shell 语法。shell pipe 操作符将一个进程的标准输出重定向到下一个进程的标准输入。command要使用 Vala 实现它,您需要获取正在运行的进程的标准输入的文件描述符,并some_var手动写入。


推荐阅读