使用参数 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()
我正在尝试使用参数启动此脚本。
当我从终端启动脚本时,我想输入“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()