我正在尝试创建一个Python脚本,主动扫描日志以获取新凭据并修复它们(Ettercap输出等),但我没有得到我想要的输出。我是while循环中的一个完整的菜鸟,我甚至不认为它是要走的路,但这就是我所拥有的:
#! /usr/bin/env python
#include <stdio.h>
import subprocess
import os
import sys
import time
while True:
username_list = list(subprocess.check_output("cat pooky.log | grep 'USER: ' | awk '{print $6}'", shell=True))
password_list = list(subprocess.check_output("cat pooky.log | grep 'PASS: ' | awk '{print $8}'", shell=True))
url = subprocess.check_output("cat pooky.log | grep 'INFO: ' | awk '{print $10}'", shell=True)
if "+" in username_list:
fix1 = username_list.index('+')
username_list[fix1] = " "
username = "".join(username_list)
if "+" in password_list:
fix2 = password_list.index('+')
password_list[fix2] = " "
old = os.stat("pooky.log").st_mtime
if os.stat("pooky.log").st_mtime != old:
username += username
password += password
url += url
print "New credentials found."
time.sleep(1)
break
答案 0 :(得分:0)
您没有设置任何条件来破坏循环,因此它将无限期地运行。如果你想把它构造成一个while循环而你不希望它永远运行,你需要在某处添加一个break语句:
while True:
# do stuff
if something == somethingElse:
break
至于你的其余代码,如果没有一些示例输入和预期输出,很难说它有什么问题。
答案 1 :(得分:0)
这是你的代码版本,每个循环只读取一次文件(不是三次):
import os
import time
log_file = "pooky.log"
old_time = None
while True:
username_list = []
password_list = []
url_list = []
log_fh = open(log_file)
for line in log_fh:
words = line.split()
if words[5] == 'USER:':
username_list.append(words[6].replace('+', ' '))
if words[7] == 'PASS:':
password_list.append(words[8].replace('+', ' '))
if words[9] == 'INFO:':
url_list.append(words[10])
close(log_fh)
new_time = os.stat(log_file).st_mtime
if old_time is not None and new_time != old_time:
print "New credentials found."
old_time = new_time
break
time.sleep(1)