写入 stdin,从 glib/gtk Vala 中的 stdout 子进程/进程读取

Write into stdin, read from stdout Subprocess/Process in Glib/GTK Vala

提问人:user1078796 提问时间:11/11/2023 更新时间:11/11/2023 访问量:27

问:

我有一个测试bash / sh脚本。它只是显示一个问题并从控制台读取答案,然后显示输出:

#!/bin/bash
# Ask the user for their name
echo Hello, who am I talking to?
read varname
echo It\'s nice to meet you $varname

我用它来测试更多的编译 sh 脚本,它实际上做同样的事情,但在 Go、Python 和 Vala 中执行。Python 如下所示:

user_input = entry1.get_text()
p = Popen(['/usr/share/bin/bla-bla'], shell=True, stdin=PIPE, stdout=PIPE)
script_output = p.communicate(input=user_input.encode('utf-8'))[0]
if script_output:
    bla-bla
else:
    Gtk.main_quit()

在 Go 中,它看起来像这样:

    user_input, _ := entry1.GetText()
    cmd := exec.Command(
        "/usr/share/bla-bla",
    )
  
    var outb bytes.Buffer
    var inb bytes.Buffer
    var errb bytes.Buffer
    cmd.Stdout = &outb
    cmd.Stderr = &errb
    cmd.Stdin = &inb
    
    inb.Write([]byte(user_input))
    cmd.Run()

    if output_line := strings.TrimSuffix(outb.String(), "\n"); output_line != "" {
        lab4.SetText(output_line)
    } else {
        but2.SetSensitive(false)
    }

我需要在 Vala GTK/Glib 中获得相同的功能。 我搜索并找到了一些解决方案,但没有一个像我预期的那样有效。主要问题是脚本无法从 stdin 获取数据。 例如,这不起作用:在 vala/glib 中读/写文件管道

请帮帮我。

gtk stdout stdin glib vala

评论


答: 暂无答案