前提知识
python获取命令行参数
1.可以通过sys模块:
import sys
def main():
"""
python xxx.py test1 test2 test3
| | | |
argv0 argv1 argv2 argv3
"""
print('参数个数为:', len(sys.argv), '个参数。')
print('参数列表:', str(sys.argv))
print('脚本名为:', sys.argv[0])
for i in range(1, len(sys.argv)):
print('参数 %s 为:%s' % (i, sys.argv[i]))
输出结果为:
参数个数为: 4 个参数。
参数列表: ['gitone.py', 'test1', 'test2', 'test3']
脚本名为: gitone.py
参数 1 为:test1
参数 2 为:test2
参数 3 为:test3
2.可以通过getopt模块:
getopt.getopt(args, shortopts, longopts=[])
args指的是当前脚本接收的参数,它是一个列表,可以通过sys.argv获得
shortopts 是短参数(python test.py -h # 输出帮助信息)
longopts 是长参数(python test.py -help # 输出帮助信息)
举一个例子:
import getopt
import sys
arg = getopt.getopt(sys.argv[1:],'-h',['help']) # argv[0]是脚本名称
print(arg)
## output:
>>>python test.py -h
([('-h', '')], [])
>>>python test.py --help
([('--help', '')], [])
官方文档是这样描述的:
对于一个”-“:
>>> import getopt
>>> args = '-a -b -cfoo -d bar a1 a2'.split()
>>> args
['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'abc:d:')
>>> optlist
[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
>>> args
['a1', 'a2']
对于一个”--“:
>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'
>>> args = s.split()
>>> args
['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'x', [
... 'condition=', 'output-file=', 'testing'])
>>> optlist
[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]
>>> args
['a1', 'a2']
下面我会用两个例子简单介绍一下:
"""
在短参数中,-a 表示“找到”命令行参数中的-a选项, -t: 表示“找到”命令行参数中-t和其后面的一个参数
在长参数中,b= 表示“找到”命令行参数中的--b选项和其后面的一个参数,可带等号也可不带等号,如--b=123 or --b 123
c 表示“找到”命令行参数中的--c选项
通过optlist获取“找到”的命令行参数及其值,而args是命令行参数未被“捕获”的参数
"""
import getopt
import sys
def main():
optlist, arg = getopt.getopt(sys.argv[1:],'-a-t:-v:',['b=', 'c', 'd='])
print("opt:")
print(optlist)
print("args:")
print(arg)
>>> python3 gitone.py -a --b=123 --c -t 56 -v 1.0 --d abc e f g
# Output:
opt:
[('-a', ''), ('--b', '123'), ('--c', ''), ('-t', '56'), ('-v', '1.0'), ('--d', 'abc')]
args:
['e', 'f', 'g']
其中短参数-a
和长参数c=
虽然后面没有参数,但并不是毫无用途:
import getopt
import sys
opts,args = getopt.getopt(sys.argv[1:],'-h-f:-v',['help','filename=','version'])
for opt_name,opt_value in opts:
if opt_name in ('-h','--help'):
print("--> Help info")
exit()
if opt_name in ('-v','--version'):
print("--> Version is 0.01 ")
exit()
if opt_name in ('-f','--filename'):
fileName = opt_value
print("--> Filename is ",fileName)
# do something
exit()
3.使用docopt模块:
这是一个帮助实现美观命令行接口的模块,官网上的介绍为:
docopt
helps you create most beautiful command-line interfaces easily
"""Naval Fate.
Usage:
naval_fate.py ship new <name>...
naval_fate.py ship [<name>] move <x> <y> [--speed=<kn>]
naval_fate.py ship shoot <x> <y>
naval_fate.py mine (set|remove) <x> <y> [--moored|--drifting]
naval_fate.py -h | --help
naval_fate.py --version
Options:
-h --help Show this screen.
--version Show version.
--speed=<kn> Speed in knots [default: 10].
--moored Mored (anchored) mine.
--drifting Drifting mine.
"""
from docopt import docopt
if __name__ == '__main__':
arguments = docopt(__doc__, version='Naval Fate 2.0')
print(arguments)
在这个例子中:
Naval Fate
是程序或应用名称,naval_fate
是命令行命令
ship, new, move这些是可选的执行命令(commands)
...
这些是位置参数(positional arguments),-h, --help, --speed=这些是选项参数(options),
- "[]"描述可选元素(optional)
- "()"描述必要元素(required)
- "|" 描述互斥元素(mutually exclusive)
- "..."描述重复元素(repeating)
这些参数,前面加上naval_fate
就形成了可用的命令,这些命令在Usage
中介绍。
Usage
下面的Options
里罗列了选项(options)及其描述,它具体描述了
- 选项是否有长/短形式,如-h, --help
- 选项后面是否带参数,如--speed=
- 选项是否有默认值,如[default: 10]
Usage
和options
里的内容就组成了帮助信息,当用户输入-h或--help参数时,命令行就会输出帮助信息。
docopt
会抽取帮助信息里的内容,然后对命令行传入的参数进行解析。
实际上不用管这些,根据前面的注释修改成自己的样子就可以了。值得注意的是,doc注释必须放在import之前、程序文件的一开头,否则可能解析不成功。
获取token
获取github私人token的方式:https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line
代码实现
代码地址在这里:https://github.com/YunLambert/PythonScript/tree/master/Gitone
使用方法就是首先获取自己的github私人token,然后更改代码里的TOKEN参数,然后python gitone.py <url>
就可以了。
结果截图: