在 Vala 中执行外部命令不会返回所需的数据

Posted

技术标签:

【中文标题】在 Vala 中执行外部命令不会返回所需的数据【英文标题】:Executing an external command in Vala does not return the desired data 【发布时间】:2018-09-15 15:33:45 【问题描述】:

我尝试使用以下函数从我在 Vala 中的代码中执行这个外部命令:

https://valadoc.org/glib-2.0/GLib.Process.spawn_command_line_sync.html

命令如下:ping -c 1 191.98.144.1 | cut -d '/' -s -f5

这个命令返回毫秒数。

我想在变量中捕获输出数据,但它给了我以下错误:

ping: unknown host |

这是我的代码:

public static int main (string[] args) 
    
    string command_out;

    try 

        Process.spawn_command_line_sync ("ping -c 1 191.98.144.1 | cut -d '/' -s -f5", out command_out);
        
        stdout.printf ("stdout: " + command_out);

     catch (SpawnError e) 

        stdout.printf ("Error: %s\n", e.message);
    

    return 0;

我做错了什么。非常感谢您的帮助。

【问题讨论】:

这看起来不像 C。 【参考方案1】:

您不能只使用spawn_command_line_sync 运行管道(使用|>< 等)。

管道是一个由 shell 进程实现的功能。

解决此问题的一种简单方法是实际生成一个 shell 进程:

Process.spawn_command_line_sync ("sh -c \"ping -c 1 191.98.144.1 | cut -d '/' -s -f5\"", out command_out);

你必须小心这里的引号。

【讨论】:

以上是关于在 Vala 中执行外部命令不会返回所需的数据的主要内容,如果未能解决你的问题,请参考以下文章

堆栈溢出所需的外部 JavaScript 问题 [关闭]

如何修复数据集以返回所需的输出(pytorch)

如何打印(在屏幕上)带有外部 url 的 iframe 所需的所有 JS 代码

访问 Redshift External 表所需的最低权限

webpack 包中所需的模块未定义

栈,堆,静态存储区