Python argv验证

Fac*_*res 2 python validation argv

我需要检查用户是否提供了输入文件和输出名称,并且正在执行以下操作:

def main():
    if len(argv) > 2:
        script, file_in, file_out = argv
        execute_code(file_in, file_out)
    else:
        print "Wrong number of arguments!"
        print "Usage: python script.py filename_input filename_output"


if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以检查argv参数是否正确吗?

vau*_*tah 5

您将使用argparse

argparse模块可以很容易地编写用户友好的命令行界面。该程序定义了所需的参数,而 argparse会找出如何从sys.argv中解析这些参数。

例如,您的main函数可以重写为

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('file_in', help='input file')
    parser.add_argument('file_out', help='output file')
    args = parser.parse_args()
    execute_code(args.file_in, args.file_out)

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

argparse 如果缺少某些必需的参数,将为您执行验证并显示相当有用的错误消息:

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('file_in', help='input file')
    parser.add_argument('file_out', help='output file')
    args = parser.parse_args()
    execute_code(args.file_in, args.file_out)

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

此外,它将生成帮助消息

vaultah@base:~$ python3 /home/vaultah/untitled.py -h
usage: untitled.py [-h] file_in file_out

positional arguments:
  file_in     input file
  file_out    output file

optional arguments:
  -h, --help  show this help message and exit
Run Code Online (Sandbox Code Playgroud)