【问题标题】:Ruby system command is giving me an outputRuby 系统命令给了我一个输出
【发布时间】:2012-11-29 08:50:26
【问题描述】:

这个红宝石“系统”给了我一个输出;在 irb 上:

system("sudo airodump-ng -w sidney wlan0")

Airodump-ng 来自 Airocrack-ng 包。

然而,红宝石“系统”不应该给我一个标准输出。 问题是,正在创建一个“sh”进程,它没有输出。但是“sh”进程有一个子进程,这给了我一个我根本不希望在终端上显示的输出。

问题的第二部分,如何使用线程以及使用 ruby​​ 调用 shell 命令的不同方式(并且不显示该子进程的输出)获取该子进程的 pid?

【问题讨论】:

  • 我不确定这是否正是您所需要的,但尝试创建一个包装器来获取进程并在其中运行?我们以前遇到过这个问题并以这种方式解决。 SO tldp.org/LDP/abs/html/wrapper.html 上有大量示例
  • 你根本不想要任何输出?
  • 不,那个问题和我的不一样,答案也不一样。

标签: ruby multithreading shell stdout


【解决方案1】:

如果您不关心输出,请丢弃它:

system("sudo airodump-ng -w sidney wlan0 >/dev/null 2>&1")

认为子进程会继承父进程的文件描述符。

【讨论】:

    【解决方案2】:

    使用

    out = `sudo airodump-ng -w sidney wlan0`
    

    相反,输出不会显示在屏幕上,而是存储在out

    【讨论】:

    • 不行,显示第二个孩子的输出。请在 irb 上试一下,你会看到它显示出来了 :-( 在这里,我想检索第二个孩子的 pid。我不能:/
    • @sidney 这可能意味着 airodump-ng 正在向 STDERR 发送内容。尝试在上述命令中添加2>&1
    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 2014-08-16
    • 2013-09-14
    • 2012-01-07
    相关资源
    最近更新 更多