python2.7多个定义,只执行一个

时间:2017-03-28 03:46:46

标签: python

我一般都是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

感谢任何想法/建议,因为这已经是一次盛大的学习冒险,我很高兴看到我能否真正做到这一点。不,这不是一个班级项目......那些日子已经落后于我......: - )

2 个答案:

答案 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)

执行以下操作

  1. print(never_output)
  2. 之后添加main()
  3. never_outputpattern = re.compile(r'(\w+)(\s+\S+\s\s+\s\w+\S+)')
  4. 进行比较