今天早些时候,这段代码按我的意愿工作。现在没有了。我希望它运行 airodump 并将输出存储到 csv 文件(命令行选项)。几秒钟后终止该进程。
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 的情况下运行子进程,则会创建并填充 csv 文件,但我不能那样做——我必须将标准输出保持在屏幕之外。
stdout=subprocess.PIPE 是否导致数据被“写入”到 PIPE-land 中不存在的 csv 文件?