簡體   English   中英

何時使用subprocess.call()或subprocess.Popen(),運行airodump

[英]When to use subprocess.call() or subprocess.Popen(), running airodump

我有這個小腳本,可以讓您的無線設備進入監控模式。 它執行airodump掃描,然后在終止掃描后將輸出轉儲到file.txt或變量,這樣我就可以刮掉BSSID以及我可能需要的任何其他信息。

我覺得我沒有理解subprocess.call()subprocess.Popen()之間的概念或區別。

這就是我目前擁有的:

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 args。 什么是PIPE

一旦我掌握得更好,我可以修復自己的另一件事是:

running subprocess.Popen()並運行airodump時,會彈出控制台窗口,顯示掃描。 有沒有辦法將這個隱藏起來?

如果你不想,你不必使用Popen() 模塊中的其他函數,例如.call()使用Popen() ,為您提供了一個更簡單的API來完成您想要的任務。

所有控制台應用程序都有3個'文件'流: stdin用於輸入, stdoutstderr用於輸出。 應用程序決定在哪里寫; 通常是stderr錯誤和診斷信息,其余的是stdout 如果要在Python程序中捕獲這些輸出中的任何一個的輸出,請指定subprocess.PIPE參數,以便將“stream”重定向到您的程序中。 由此得名。

如果要捕獲airodump-ng wlan0命令的輸出,最簡單的方法是使用subprocess.check_output()函數; 它為您處理PIPE論證:

scanned_networks = subprocess.check_output(["airodump-ng", "wlan0"])

現在output包含airodump-ng寫入其stdout流的任何內容。

如果您需要對進程有更多控制權,那么您需要使用Popen()類:

proc = subprocess.Popen(["airodump-ng", "wlan0"], stdout=subprocess.PIPE)
for line in proc.stdout:
    # do something with line
proc.terminate()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM