今天早些時候,這段代碼工作,因爲我想它。現在它不。我希望它運行airodump並將輸出存儲到csv文件(命令行選項)。幾秒鐘後殺死這個過程。是python子流程模塊古怪嗎?
def find_networks():
airodump = subprocess.Popen(["airodump-ng","-w","airo","--output-format","csv","mon0"],stdout=subprocess.PIPE, stderr=subprocess.PIPE)
time.sleep(10)
try:
os.kill(airodump.pid, signal.SIGTERM)
if not airodump.poll():
print "shouldn't have had to do this.."
airodump.kill()
if not airodump.poll():
print "shouldn't have had to do this....."
airodump.terminate()
if not airodump.poll():
print "shouldn't have had to do this........"
except OSError:
print "?"
pass
except UnboundLocalError:
print "??"
pass
return_code = airodump.wait()
print return_code
(這裏的輸出是: 不應該有這樣做.. 不應該有這樣做..... -9)
此前它會做正是我所說的(相同的代碼)。負面9令人擔憂,早些時候我得到1,但這個過程仍然會死亡,這是非常重要的,但不是由於os.kill聲明,這是很奇怪的。但這並不是什麼大問題。我需要的是.csv文件。在這個實現中,csv文件是完全空的 - 它是被創建的,但沒有任何東西放入它。如果我運行沒有設置爲PIPE的stdout的子進程,csv文件被創建並填充,但是我不能這麼做 - 我必須將stdout保留在屏幕之外。
stdout = subprocess.PIPE導致數據「寫入」PIPE-land中不存在的csv文件?
在我看來''airodump.kill()'和'airodump.terminate()'應該交換。 'kill'發送了SIGKILL,這個進程終止了,而SIGTERM只是要求進程退出。 –