下载github单独文件夹的一个自用脚本

Posted yunlambert

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了下载github单独文件夹的一个自用脚本相关的知识,希望对你有一定的参考价值。

前提知识

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]

Usageoptions里的内容就组成了帮助信息,当用户输入-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>就可以了。

结果截图:

技术图片

以上是关于下载github单独文件夹的一个自用脚本的主要内容,如果未能解决你的问题,请参考以下文章

Tampermonkey脚本安装问题及自用脚本推荐

在Centos7 上实现编译HTTP(自用)

自用的打cookie简易js脚本

执行sh脚本文件下载Github上的代码(雷霄骅的ffmpeg示例代码)

Word 脚本 (自用)

使用用TortoiseSVN从github下载单独的文件及文件夹