折腾:
【未解决】用Python从gitbook的markdown文件SUMMARY.md生成相关md文件
期间,希望支持从命令行运行Python脚本时,可以传入参数
很久之前就弄过。现在都忘了, 去找找
python command parameters
getopt
argparse
python argparse
先写代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import argparse argParser = argparse.ArgumentParser() argParser.add_argument( "-f" , "--file" , type = str , required = True , help = "full path of entry SUMMARY.md file" ) args = argParser.parse_args() if not args. file : raise Exception( "SUMMARY.md file required !" ) summaryMdFullPath = args. file # # for debug # summaryMdFullPath = "/Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY.md" print ( "summaryMdFullPath=%s" % summaryMdFullPath) |
去命令行调试:
1 2 | common /tools/generate_md_from_summary .py -- file /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY .md zsh: permission denied: common /tools/generate_md_from_summary .py |
报错了。去加上权限:
1 | chmod +x common /tools/generate_md_from_summary .py |
确认权限:
1 2 3 4 5 6 7 | ll common /tools total 56 -rw-r--r-- 1 xxx 1748468295 6.1K 6 27 2020 generate_book_json.py -rwxr-xr-x 1 xxx 1748468295 634B 5 9 10:05 generate_md_from_summary.py -rw-r--r-- 1 xxx 1748468295 4.0K 3 17 2020 generate_readme_md.py -rw-r--r-- 1 xxx 1748468295 3.8K 9 16 2020 sync_ReadmeCurrent_to_bookCurrent.py -rw-r--r-- 1 xxx 1748468295 6.2K 9 18 2020 update_crifan_github_io_readme.py |

看到有x=execute=可执行 权限了
1 2 | common /tools/generate_md_from_summary .py -- file /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY .md summaryMdFullPath= /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY .md |
可以获取到参数了。
1 2 | common /tools/generate_md_from_summary .py -f /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY .md summaryMdFullPath= /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY .md |
用-f也是可以的了。
不给参数,看看是否会报错
1 2 3 | common/tools/generate_md_from_summary.py usage: generate_md_from_summary.py [-h] -f FILE generate_md_from_summary.py: error: argument -f/--file is required |
果然可以报错,提示-f是必须的
如此,即可。
【总结】
此处,让Python支持从命令行中传入参数
用argparse
具体例子:
1 2 3 4 5 6 7 8 9 10 11 | import argparse argParser = argparse.ArgumentParser() argParser.add_argument( "-f" , "--file" , type = str , required = True , help = "full path of entry SUMMARY.md file" ) args = argParser.parse_args() # if not args.file: # raise Exception("SUMMARY.md file required !") summaryMdFullPath = args. file print ( "summaryMdFullPath=%s" % summaryMdFullPath) |
调用举例:
1 2 3 | common /tools/generate_md_from_summary .py -f /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY .md common /tools/generate_md_from_summary .py -- file /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY .md |
注意:从命令行运行直接运行此py脚本的话,要确保有可执行权限,如果没有,需要加上:
1 | chmod +x common /tools/generate_md_from_summary .py |
相关资料:
- add_argument()
- 参数概述
- name or flags – 一个命名或者一个选项字符串的列表,例如 foo 或 -f, –foo。
- action – 当参数在命令行中出现时使用的动作基本类型。
- nargs – 命令行参数应当消耗的数目。
- const – 被一些 action 和 nargs 选择所需求的常数。
- default – 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。
- type – 命令行参数应当被转换成的类型。
- choices – 可用的参数的容器。
- required – 此命令行选项是否可省略 (仅选项可用)。
- help – 一个此选项作用的简单描述。
- metavar – 在使用方法消息中使用的参数值示例。
- dest – 被添加到 parse_args() 所返回对象上的属性名。
- 官网(详细)文档
后记:
去写最简单的demo
已回复:
附上demo文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | # Function: Demo argparse basic usage # Author: Crifan Li # Update: 20210509 import argparse argParser = argparse.ArgumentParser() # argParser.add_argument("-a") # most simple -> got args.a, type is `str` # default type is `str` => same with: # argParser.add_argument("-a", type=str) # argParser.add_argument("-a", help="your age") # with help # `python argparseDemo.py --help` can see help description # argParser.add_argument("-a", type=int) # parsed arg is `int`, not default `str` # argParser.add_argument("-a", "--age", help="your age") # -x, --xxx -> got args.age # argParser.add_argument("-a", "--your-age", help="your age") # -x, --xxx-yyy -> got args.xxx_yyy # argParser.add_argument("-y", "--year", type=int, ) # argParser.add_argument("-y", "--year", type=int, help="year") # # argParser.add_argument("-f", "--file", type=str, required=True, help="your input file full path") # argParser.add_argument("-n", "--your-name", type=str, help="your name") # argParser.add_argument("-a", "--age", type=int, default=20, help="your current age") # argParser.add_argument("-a", "--age", required=True, type=int, help="your current age") # argParser.add_argument("-f", "--love-fruit", choices=['apple', 'orange', 'banana'], help="your love fruits") # argParser.add_argument("-a", "--age", required=True, type=int, help="your current age") # argParser.add_argument("-f", "--love-fruit", nargs=2, help="your love fruits") # argParser.add_argument("-n", "--name", help="your name") argParser.add_argument( "-a" , "--age" , type = int , help = "your current age" ) args = argParser.parse_args() print ( "type(args)=%s" % type (args)) print ( "args=%s" % args) # print("args.a=%s" % args.a) # print("type(args.a)=%s" % type(args.a)) # print("args.g=%s" % args.g) # print("args.gender=%s" % args.gender) # print("args.file=%s" % args.file) # print("args.your_name=%s" % args.your_name) print ( "type(args.age)=%s" % type (args.age)) print ( "args.age=%s" % args.age) # print("args.love_fruit=%s" % args.love_fruit) # print("type(args.name)=%s" % type(args.name)) # print("args.name=%s" % args.name) |
供参考。
转载请注明:在路上 » 【已解决】Python文件支持运行时从命令行传入参数