Python - 接收命令行参数

文章目录

    • 方式一:通过sys.argv
    • 方式二:getopt()
    • 方式三:argparse


方式一:通过sys.argv

import sys

if __name__ == '__main__': 
    print(sys.argv)
    print(len(sys.argv))

使用 python main.py 或用 pycharm 运行时,得到的结果为:

['.../xxx/main.py']   # 本文件地址
1

如果在终端执行:

(base) $ python main.py a b
['main.py', 'a', 'b']
3 

方式二:getopt()

参数有两种维度区分:
维度1:短选项 & 长选项
维度2:带参数值(开关)& 不带参数值

1、短选项
使用 -参数名,由1个字母组成; 如 -i
多个短选可以混合,如 -o -t 可写为 -ot
带参数值,字母后面跟冒号: ,如 ``

2、长选项
使用 --参数名,如 --version
带参数的,后面要紧跟 =, 如 --input=/use/bin/xx= 左右两侧都不能有空格。


getopt.getopt 方法表示

getopt.getopt(args, options[, long_options])

例子

opts, args = getopt.getopt(sys.argv[1:], 'v:' )
    print('opts : ', opts)
$ python main.py -v:hi
opts :  [('-v', ':hi')]
args :  []


例子

print(sys.argv)
opts, args = getopt.getopt(sys.argv[1:], 'av:' )

(base) $ python main.py -av:hi
['main.py', '-av:hi']
opts :  [('-a', ''), ('-v', ':hi')]


(base) $ python main.py -av hi
['main.py', '-av', 'hi']
opts :  [('-a', ''), ('-v', 'hi')]
 

例子

opts, args = getopt.getopt(sys.argv[1:], 'vf:c')

(base) $ python main.py -v -f:hi -c 
argv :  ['main.py', '-v', '-f:hi', '-c']
opts :  [('-v', ''), ('-f', ':hi'), ('-c', '')]
 
(base) $ python main.py -v -f hi -c 
argv :  ['main.py', '-v', '-f', 'hi', '-c']
opts :  [('-v', ''), ('-f', 'hi'), ('-c', '')]

例子

print(sys.argv)
opts, args = getopt.getopt(sys.argv[1:], 'v', ["output="] )

 $ python main.py -v  --output=night
['main.py', '-v', '--output=night']
opts :  [('-v', ''), ('--output', 'night')]

例子

print(sys.argv)
opts, args = getopt.getopt(sys.argv[1:], 'v', ["help", "output="])
$ python main.py -v --help  --output=night
['main.py', '-v', '--help', '--output=night']
opts :  [('-v', ''), ('--help', ''), ('--output', 'night')]


例子
多个短选项 和 多个长选项,最好把短选项合成一个字符串来写,如下:

opts, args = getopt.getopt(sys.argv[1:], 'vf:c', ["help", "output="])


(base) $ python main.py -v -f hi -c --help --output=osx
argv :  ['main.py', '-v', '-f', 'hi', '-c', '--help', '--output=osx']
opts :  [('-v', ''), ('-f', 'hi'), ('-c', ''), ('--help', ''), ('--output', 'osx')]


	print('argv : ', sys.argv)

    opts, args = getopt.getopt(sys.argv[1:], 'vo:h', ["help", "output=", "version="])
    print('opts : ', opts)
    print('args : ', args)

    for opt_name, opt_value in opts:
        if opt_name in ('-h', '--help'):
            print("[*] Help info")
            exit()

        if opt_name in ('-o', '--output'):

            output = opt_value
            print('output : ', output)
            break

 $ python main.py -v -o:osx1 -h --help --output=osx2
-- app :  <Celery __main__ at 0x7f8f0cb16d10>
argv :  ['main.py', '-v', '-o:osx1', '-h', '--help', '--output=osx2']
opts :  [('-v', ''), ('-o', ':osx1'), ('-h', ''), ('--help', ''), ('--output', 'osx2')]
output :  :osx1


方式三:argparse

https://docs.python.org/zh-cn/3/library/argparse.html



import argparse
 
if __name__ == '__main__':

    parser = argparse.ArgumentParser()

    parser = argparse.ArgumentParser(description='Process some integers.')
    parser.add_argument('integers', metavar='N', type=int, nargs='+',
                        help='an integer for the accumulator')

    parser.add_argument('--sum', dest='accumulate', action='store_const',
                        const=sum, default=max,
                        help='sum the integers (default: find the max)')

    parser.add_argument("-o", "--output", metavar="DIR", help="write weights to DIR")

    args = parser.parse_args()


    print(args) # Namespace(output='nihao')
    print(type(args)) # 

    print(args.accumulate(args.integers))

使用测试

(base) $  python t01.py -h
usage: t01.py [-h] [--sum] [-o DIR] N [N ...]

Process some integers.

positional arguments:
  N                     an integer for the accumulator

optional arguments:
  -h, --help            show this help message and exit
  --sum                 sum the integers (default: find the max)
  -o DIR, --output DIR  write weights to DIR

(base) $  python t01.py  --sum  1 3 5 7
Namespace(accumulate=<built-in function sum>, integers=[1, 3, 5, 7], output=None)
<class 'argparse.Namespace'>
16

你可能感兴趣的:(Python,python,pycharm,爬虫)