使用参数 sys.argv 启动脚本

start script with arguments sys.argv

我正在尝试使用参数启动此脚本。

当我从终端启动脚本时,我想输入“python test.py C:\Users\etc\etc\log.log count”到 运行 func1 或错误到 运行 func3.

我试过 sys.argv / sys.argv[2] 但我无法让它工作。

import sys



def func1():
    
    count = 0
    with open(r'C:\Users\etc\etc\log.log') as logfile:
        lines = logfile.readlines()
    for error in lines:
        count += error.count('[error]')  
    print('errors', count)

def func3():

    import re
    
    with open(r'C:\Users\etc\etc\log.log') as logfile:
        for line in map(str.strip, logfile):
            m = re.findall('\[.*?\]', line)
            if len(m) > 1 and m[1] in ('[error]'):
                offset = line.find(m[1]) + len(m[1]) + 1
                print(m[0], line[offset:])


if __name__ == '__main__':
    
    func1()
    func3()

sys.argv 是包含传递给程序的参数的列表。第一项是文件名,其余是参数,因此要获得您使用的第一个参数 sys.argv[1].
因为不一定提供第一个参数,所以我使用 try/except 块来捕获可能的 IndexError。你可以随心所欲地处理它。
然后,您可以只使用 if 语句来决定 运行.

哪个函数
import sys

def func1():
    
    count = 0
    with open(r'C:\Users\etc\etc\log.log') as logfile:
        lines = logfile.readlines()
    for error in lines:
        count += error.count('[error]')  
    print('errors', count)

def func3():

    import re
    
    with open(r'C:\Users\etc\etc\log.log') as logfile:
        for line in map(str.strip, logfile):
            m = re.findall('\[.*?\]', line)
            if len(m) > 1 and m[1] in ('[error]'):
                offset = line.find(m[1]) + len(m[1]) + 1
                print(m[0], line[offset:])


if __name__ == '__main__':
    try:
        arg = sys.argv[1]
    except: pass
    else:
        if arg == "count":
            func1()
        elif arg == "error":
            func3()