如何将 os.popen 命令更改为 python 中的子进程命令
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
是一个列表。每个捕获的行仍然包含其终止换行符。 (当然,如果这不是您想要的,很容易修复。)
作为优化,当您看到 en_time
时,您可以 break
(尽管这样脚本不会完全等同于 sed
脚本)。
这也应该很容易适应 st_time
没有准确出现在日志文件中的场景。您将需要解析每一行的时间戳,然后在解析的日期戳等于或大于(解析的)st_time
值时简单地开始处理。同样,解析 en_time
并在看到时间戳等于或高于此值的日志条目时退出。
我知道 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
是一个列表。每个捕获的行仍然包含其终止换行符。 (当然,如果这不是您想要的,很容易修复。)
作为优化,当您看到 en_time
时,您可以 break
(尽管这样脚本不会完全等同于 sed
脚本)。
这也应该很容易适应 st_time
没有准确出现在日志文件中的场景。您将需要解析每一行的时间戳,然后在解析的日期戳等于或大于(解析的)st_time
值时简单地开始处理。同样,解析 en_time
并在看到时间戳等于或高于此值的日志条目时退出。