繁体   English   中英

如何在python中将os.popen命令更改为子处理命令

[英]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.

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