我一般都是python和编码的新手,但是工作的需要让我有机会看到我是否能找到/写出一个可行的想法/解决方案。 最终的目标是拥有一个Salt-Stack模块,但现在我只关注直接的python代码 需要的是有代码可以帮助我们确定陈旧/旧登录,然后最终逻辑然后对这些帐户做一些事情。 以下是我迄今为止能够整理的内容,第一个定义有效,并提供了我期望的输出。但是,第二个定义似乎根本没有执行,我不知道为什么。 以下是我到目前为止拼凑的内容:
import subprocess
import re
logins = "for i in `cat /etc/passwd |awk -F : '{print $1}'`; do lastlog -u $i|grep -v Username|grep -v Never; done "
p = subprocess.Popen(logins, shell=True, bufsize=0, stdout=subprocess.PIPE, universal_newlines=True)
p.wait()
output = p.stdout.read()
p.stdout.close()
nevers = "for n in `cat /etc/passwd |awk -F : '{print $1}'`; do lastlog -u $n|grep -v Username|grep Never; done "
p = subprocess.Popen(nevers, shell=True, bufsize=0, stdout=subprocess.PIPE, universal_newlines=True)
p.wait()
never_output = p.stdout.read()
p.stdout.close()
def last_login():
pattern = re.compile(r'(\w+)(\s+\B.\bpts\/\d\s+[^A-Z]+) (\w+\s\w+\s+\d+\s+\d+:\d+:\d+)(\s+-\d+\s+)(\d+)')
for m in re.finditer(pattern, output):
print m.group(1), '\t', m.group(3), m.group(5)
#return output
def never_logged_in():
pattern = re.compile(r'(\w+)(\s+\S+\s\s+\s\w+\S+)')
for x in re.finditer(pattern, never_output):
print x.group(1)
#return never_output
def main():
never_logged_in()
last_login()
main()
这是什么" def last_login()"确实提供:
test1 Sun Mar 26 15:21:58 2017
test2 Sun Mar 26 15:22:08 2017
这是" def never_logged_in()"的一个例子。应该提供:
test4
感谢任何想法/建议,因为这已经是一次盛大的学习冒险,我很高兴看到我能否真正做到这一点。不,这不是一个班级项目......那些日子已经落后于我......: - )
答案 0 :(得分:0)
我的代码没问题,这是我的正则表达不按预期工作。 解决方案是:
def never_logged_in():
pattern = re.compile(r'(\w+)(\s+\*\*Never logged in\*\*)')
for x in re.finditer(pattern, never_output):
print x.group(1)
现在进入下一阶段......谢谢大家!
答案 1 :(得分:-1)
执行以下操作
print(never_output)
main()
never_output
与pattern =
re.compile(r'(\w+)(\s+\S+\s\s+\s\w+\S+)')