在 python3 中还有其他验证命令行参数的方法吗?
Are there other ways of validating command line args in python3?
是否有其他更有效的方法在没有外部模块和 argparse 的情况下验证命令行参数?
import sys
import getopt
argv = sys.argv[1:]
try:
opts, args = getopt.getopt(argv, "h", ["help", "version", "number="])
except getopt.GetoptError as error:
print(error)
exit(1)
if args:
exit(1)
print(opts)
print(args)
所以我会这样做,但是可以吗?我是 python 的新手,正在尝试使用尽可能多的 python 功能
您应该查看 Python 的内置 argparse。从命令行手动解析复杂命令省去了很多麻烦。您可以强制某些参数为特定类型或值。
用法示例:
import sys
import argparse
PHASES = ['clean', 'package', 'install', 'test', 'deploy']
ALT_PHASES = ['docs', 'demos', 'update']
parser = argparse.ArgumentParser()
parser.add_argument(
'phase',
help="the target phase",
choices=PHASES + ALT_PHASES
)
parser.add_argument(
'--skip-demos',
help="skip packaging and deployment of demos",
action='store_const',
const=str
)
parser.add_argument(
'--skip-docs',
help="skip generation and deployment of user's guide",
action='store_const',
const=str
)
parser.add_argument(
'--skip-tests',
help="skip tests",
action='store_const',
const=str
)
parser.add_argument(
'--skip-wheels',
help="skip wheel generation",
action="store_const",
const=str
)
parser.add_argument(
'--update',
help="update the source code in the virtual environment; do not make the wheels",
action="store_const",
const=str
)
def main(args):
parsed_args = parser.parse_args(args)
print(parsed_args.phase) # prints the phase
if __name__ == "__main__":
main(sys.argv[1:])
输入无效参数时的示例输出:
$ python3 build.py hello
usage: build.py [-h] [--skip-demos] [--skip-docs] [--skip-tests]
[--skip-wheels] [--docs-branch DOCS_BRANCH]
[--skip-formatting] [--int-tests] [--update]
{clean,package,install,test,deploy,docs,demos,update}
build.py: error: argument phase: invalid choice: 'hello' (choose from 'clean', 'package', 'install', 'test', 'deploy', 'docs', 'demos', 'update')
Python 中有几个很好的库来支持命令行解析和参数验证。
我已尝试 Argparse in the past and it works great. You could refer to this 回答以了解如何使用 Argparse。
希望对您有所帮助!
是否有其他更有效的方法在没有外部模块和 argparse 的情况下验证命令行参数?
import sys
import getopt
argv = sys.argv[1:]
try:
opts, args = getopt.getopt(argv, "h", ["help", "version", "number="])
except getopt.GetoptError as error:
print(error)
exit(1)
if args:
exit(1)
print(opts)
print(args)
所以我会这样做,但是可以吗?我是 python 的新手,正在尝试使用尽可能多的 python 功能
您应该查看 Python 的内置 argparse。从命令行手动解析复杂命令省去了很多麻烦。您可以强制某些参数为特定类型或值。
用法示例:
import sys
import argparse
PHASES = ['clean', 'package', 'install', 'test', 'deploy']
ALT_PHASES = ['docs', 'demos', 'update']
parser = argparse.ArgumentParser()
parser.add_argument(
'phase',
help="the target phase",
choices=PHASES + ALT_PHASES
)
parser.add_argument(
'--skip-demos',
help="skip packaging and deployment of demos",
action='store_const',
const=str
)
parser.add_argument(
'--skip-docs',
help="skip generation and deployment of user's guide",
action='store_const',
const=str
)
parser.add_argument(
'--skip-tests',
help="skip tests",
action='store_const',
const=str
)
parser.add_argument(
'--skip-wheels',
help="skip wheel generation",
action="store_const",
const=str
)
parser.add_argument(
'--update',
help="update the source code in the virtual environment; do not make the wheels",
action="store_const",
const=str
)
def main(args):
parsed_args = parser.parse_args(args)
print(parsed_args.phase) # prints the phase
if __name__ == "__main__":
main(sys.argv[1:])
输入无效参数时的示例输出:
$ python3 build.py hello
usage: build.py [-h] [--skip-demos] [--skip-docs] [--skip-tests]
[--skip-wheels] [--docs-branch DOCS_BRANCH]
[--skip-formatting] [--int-tests] [--update]
{clean,package,install,test,deploy,docs,demos,update}
build.py: error: argument phase: invalid choice: 'hello' (choose from 'clean', 'package', 'install', 'test', 'deploy', 'docs', 'demos', 'update')
Python 中有几个很好的库来支持命令行解析和参数验证。
我已尝试 Argparse in the past and it works great. You could refer to this 回答以了解如何使用 Argparse。
希望对您有所帮助!