Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 编写一个程序来生成日志_Python_Logging_Arguments_Parameter Passing - Fatal编程技术网

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)