繁体   English   中英

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

[英]python2.7 multiple definitions, only one executes

我是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

感谢您的任何想法/建议,因为这已经是一次盛大的学习冒险,我很高兴看到我是否真的可以完成这项工作。 不,这不是一个班级项目……那些日子已经过去了……:-)

我的代码还可以,是我的正则表达式无法正常工作。 解决方案是:

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. main()之后添加print(never_output) main()
  2. 比较never_outputpattern = re.compile(r'(\\w+)(\\s+\\S+\\s\\s+\\s\\w+\\S+)')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM