最新消息:20210917 已从crifan.com换到crifan.org

【已解决】Python文件支持运行时从命令行传入参数

Python crifan 1114浏览 0评论
折腾:
【未解决】用Python从gitbook的markdown文件SUMMARY.md生成相关md文件
期间,希望支持从命令行运行Python脚本时,可以传入参数
很久之前就弄过。现在都忘了, 去找找
python command parameters
Python Command Line Arguments – Real Python
Python – Command Line Arguments – Tutorialspoint
getopt
Command Line Arguments in Python (stackabuse.com)
argparse
python argparse
argparse — Parser for command-line options, arguments and sub-commands — Python 3.9.5 documentation
argparse — Parser for command-line options, arguments and sub-commands — Python 3.9.5 documentation
argparse — 命令行选项、参数和子命令解析器 — Python 3.9.5 文档
先写代码:
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)
去命令行调试:
 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
报错了。去加上权限:
 chmod +x common/tools/generate_md_from_summary.py 
确认权限:
 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=可执行 权限了
 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
可以获取到参数了。
 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也是可以的了。
不给参数,看看是否会报错
 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
具体例子:
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)
调用举例:
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脚本的话,要确保有可执行权限,如果没有,需要加上:
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() 所返回对象上的属性名。
    • 官网(详细)文档

后记:
python – Simple argparse example wanted: 1 argument, 3 results – Stack Overflow
去写最简单的demo
argparse — Parser for command-line options, arguments and sub-commands — Python 3.9.5 documentation
已回复:
python – Simple argparse example wanted: 1 argument, 3 results – Stack Overflow
附上demo文件:
# 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文件支持运行时从命令行传入参数

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
92 queries in 0.183 seconds, using 23.35MB memory