首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用subprocess.call()或subprocess.Popen(),运行airodump

何时使用subprocess.call()或subprocess.Popen(),运行airodump
EN

Stack Overflow用户
提问于 2013-06-02 19:00:45
回答 1查看 8.7K关注 0票数 3

我有一个小脚本,可以让你的无线设备进入监控模式。它执行一次airodump扫描,然后在结束扫描后将输出转储到file.txt或一个变量,这样我就可以抓取BSSID和我可能需要的任何其他信息。

我觉得我还没有掌握subprocess.call()subprocess.Popen()之间的概念和区别。

这是我目前所拥有的:

代码语言:javascript
复制
def setup_device(): 
    try:
        output = open("file.txt", "w")
        put_device_down = subprocess.call(["ifconfig", "wlan0", "down"])
        put_device_mon = subprocess.call(["iwconfig", "wlan0", "mode", "monitor"]) 
        put_device_up = subprocess.call(["iwconfig", "wlano", "up"])
        start_device = subprocess.call(["airmon-ng", "start", "wlan0"])
        scanned_networks = subprocess.Popen(["airodump-ng", "wlan0"], stdout = output)  
        time.sleep(10)  
        scanned_networks.terminate()

    except Exception, e:
         print "Error:", e

我仍然不知道何时何地以何种方式使用subprocess.call()subprocess.Popen()

我认为最让我困惑的是stdoutstderr参数。什么是PIPE

一旦我掌握得更好,我可能会解决的另一件事是:

当运行running subprocess.Popen()并运行airodump时,将弹出显示扫描的控制台窗口。有没有办法对用户隐藏这一点,以清理一些东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-02 19:10:47

如果您不想使用Popen(),则不必使用它。模块中的其他函数,如使用Popen().call(),为您提供了一个更简单的应用程序接口来执行您想要的操作。

所有控制台应用程序都有3个“文件”流:stdin用于输入,stdoutstderr用于输出。应用程序决定将什么写入到何处;通常是将错误和诊断信息写入stderr,其余的写入stdout。如果您希望在Python程序中捕获这些输出中的任何一个的输出,则需要指定subprocess.PIPE参数,以便将“流”重定向到您的程序中。因此得名。

如果想要捕获airodump-ng wlan0命令的输出,最简单的方法是使用subprocess.check_output()函数;它会为您处理PIPE参数:

代码语言:javascript
复制
scanned_networks = subprocess.check_output(["airodump-ng", "wlan0"])

现在,output包含了airodump-ng写入其stdout流的所有内容。

如果您需要对流程进行更多的控制,则确实需要使用Popen()类:

代码语言:javascript
复制
proc = subprocess.Popen(["airodump-ng", "wlan0"], stdout=subprocess.PIPE)
for line in proc.stdout:
    # do something with line
proc.terminate()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16882112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档