glib - 如何使用 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
方法提供的值。
解决方案
问题是您为本质上是内核的exec()
系统调用提供了 shell 语法。shell pipe 操作符将一个进程的标准输出重定向到下一个进程的标准输入。command
要使用 Vala 实现它,您需要获取正在运行的进程的标准输入的文件描述符,并some_var
手动写入。
推荐阅读
- pandas - 如何增加每列/组的索引
- ruby-on-rails - Rails 表单在一个页面上
- c# - 无法修改响应标头,因为响应已经开始
- openpose - 在 Google Collab 中永久安装 OpenPose
- hadoop - 尝试打开 Hadoop 时,我在 Google Cloud 终端中不断收到“Permission Denied”
- amazon-web-services - 从 Mturk Sandbox 检索结果
- faunadb - 如何使用 Fauna 和 FQL 查询一系列值?
- javascript - 如何在javascript中检查日期不为零?
- c++ - 如何使用 QGraphicsProxyWidget 方法正确放大放置在 QGraphicsView 中的 QWidget
- bash - 用另一个文件中的行替换 bash 中的行