[英]How change a os.popen command to subprocess command in python
我知道os.popen现在已被弃用。 因此,这是将os.popen命令转换为子进程的最简单方法。
cmd_i = os.popen('''sed -n /%s/,/%s/p %s | grep "Invalid Credentials"''' % (st_time, en_time, fileName))
subprocess
代码大致相同。
output = subprocess.check_output(
'''sed -n /%s/,/%s/p %s | grep "Invalid Credentials"''' % (st_time, en_time, fileName),
shell=True)
输出被捕获到变量中,而不是溢出到Python控件之外的标准输出中。 如果您只想print
它,请继续进行操作。
如果grep
找不到任何东西,这将引发异常。 您可以使用它来陷井, except
您想以一种或另一种方式处理这种极端情况。
但是,您可以轻松地用本机Python代码替换所有这些。
with open(fileName, 'r') as input:
between = False
output = []
for line in input:
if st_time in line:
between = True
if between and 'Invalid Credentials' in line:
output.append(line)
if en_time in line:
between = False
在这种情况下, output
是一个列表。 每个捕获的行仍包含其终止的换行符。 (当然,如果那不是您想要的,易于修复。)
作为一种优化,你可以break
,当你看到en_time
(虽然脚本将不完全等同于sed
脚本)。
这也应该很容易适应st_time
不在日志文件中确切出现的情况。 您将需要解析每行上的时间戳,然后在解析的日期戳等于或大于(解析的) st_time
值时简单地开始处理。 同样,当您看到带有等于或大于此值的时间戳的日志条目时,解析en_time
并退出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.