Python 编写一个程序来生成日志
我的文本文件Python 编写一个程序来生成日志,python,logging,arguments,parameter-passing,Python,Logging,Arguments,Parameter Passing,我的文本文件 192.168.10.20---[18/Jul/2017:08:41:37+0000]“PUT/search/tag/list HTTP/1.0”200 5042http://cooper.com/homepage/“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/5342(KHTML,类似Gecko)Chrome/14.0.870.0 Safari/5342” 10.30.24.3--[18/Jul/2017:08:45:15+0000]“发布/
192.168.10.20---[18/Jul/2017:08:41:37+0000]“PUT/search/tag/list HTTP/1.0”200 5042http://cooper.com/homepage/“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/5342(KHTML,类似Gecko)Chrome/14.0.870.0 Safari/5342”
10.30.24.3--[18/Jul/2017:08:45:15+0000]“发布/搜索/标记/列表HTTP/1.0”200 4939http://www.cole-brown.net/category/main/list/privacy/“Mozilla/5.0(X11;Linux i686)AppleWebKit/5322(KHTML,类似Gecko)Chrome/14.0.843.0 Safari/5322”
98.5.45.3---[18/Jul/2017:08:45:49+0000]“GET/apps/cart.jsp?appID=8471 HTTP/1.0”200 4958”http://knight-chase.com/post.jsp“Mozilla/5.0(Macintosh;U;PPC Mac OS X 10_7_3;rv:1.9.6.20)Gecko/2013-11-03 17:44:01 Firefox/3.8”
94.5.6.3--[18/Jul/2017:08:48:56+0000]“获取/列出HTTP/1.0”200 4891http://thomas.com/explore/wp-content/homepage/“Mozilla/5.0(Macintosh;U;英特尔Mac OS X 10_5_4;rv:1.9.5.20)Gecko/2013-02-19 05:36:22 Firefox/3.6.15”
预期来自用户的输入:
1) 要生成的行数
2) 输出到文件或控制台
3) 在未提供程序参数时提供帮助
4) 确保程序生成的行数为该程序用户输入的行数。(想想大数字)
python3 test.py--帮助(它应该显示帮助选项)
python3test.py-n20型控制台(它应该打印登录控制台)
python3 test.py-N 10-type log-name abc.log(它应该在文件中打印日志)
我的Psedo代码
import sys
from itertools import islice
args = sys.argv
print (args)
#['file.py', 'datafile', '-N', '10']
if args[1] == '-h':
print ("-N for printing the number of lines: python file.py datafile -N 10")
if args[2] == '-N':
datafile = args[1]
number = int(args[3])
with open(datafile) as myfile:
head = list(islice(myfile, number))
head = [item.strip() for item in head]
print (head)
print ('\n'.join(head))
有没有比这更好的方法呢,比如传递参数,对于命令行参数,使用Python标准库:
如果未指定输出文件,此程序将默认在控制台中打印行
def parsing_arguments():
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter,
description="""Write what your tool is doing here""")
parser.add_argument("-n",
"--number_of_lines",
type=int,
help="Number of line to be generated",
required=True)
parser.add_argument("-o",
"--output_file",
default=None,
help="output file used for saving logs")
args = parser.parse_args()
output_to_console = args.output_file is None
return {"number_of_lines": args.number_of_lines,
"output_file": args.output_file
"output_to_console":args.output_to_console}
def line_generator_function(number_of_lines,output_file,output_to_console):
lines = ... # custom logic here # assuming that lines is a list of strings
if output_to_console is True:
print(*lines, sep="\n")
else:
with open(output_file, "wt") as out:
print(*lines, sep="\n", file=out)
if __name__ == "__main__":
arguments = line_generator_function()
line_generator_function(**arguments)
argparse会自动提供--帮助。它将打印主说明和提供给参数说明的帮助。它被称为,没有任何参数。
如果您需要dekstop GUI,您可以检查此工具 请参考此问题:您可以准备
INI
或YAML
文件,并用它们控制程序。当然,参数必须以某种方式从控制台传递到程序。因此,通过辩论是不可避免的。但是,有些库可以处理这些用户输入的进一步处理。我立刻想到了三种能很好地处理解析参数的工具:,和。
def parsing_arguments():
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter,
description="""Write what your tool is doing here""")
parser.add_argument("-n",
"--number_of_lines",
type=int,
help="Number of line to be generated",
required=True)
parser.add_argument("-o",
"--output_file",
default=None,
help="output file used for saving logs")
args = parser.parse_args()
output_to_console = args.output_file is None
return {"number_of_lines": args.number_of_lines,
"output_file": args.output_file
"output_to_console":args.output_to_console}
def line_generator_function(number_of_lines,output_file,output_to_console):
lines = ... # custom logic here # assuming that lines is a list of strings
if output_to_console is True:
print(*lines, sep="\n")
else:
with open(output_file, "wt") as out:
print(*lines, sep="\n", file=out)
if __name__ == "__main__":
arguments = line_generator_function()
line_generator_function(**arguments)