skip input() if arguments are passed into script
我不能把这些都放在一起…在脚本的开头,我有一些用户输入以获取基本信息:
1 2 3 | def get_provider(): print("Operations are ...", conversion_type ) conversion = input('Enter conversion ') |
这(以及其他一些用户输入部分)是驱动脚本其余部分的原因。
我希望能够只传入变量,并使用argv设置变量,而不是使用用户输入部分。这更多是为了调试。不过,我不想取消用户输入部分。如果传入参数,则跳过。
我认为解决方案是围绕argv parse和
下面是一个我尝试过但效果不太好的例子:
1 2 3 4 5 6 7 8 9 10 11 12 | def get_provider(): print("Operations are ...", conversion_types ) conversion_type = input('Enter conversion ') conversion_type = get_provider() def main(): conversion_type = sys.argv[0] if __name__ == '__main__': main() ... the rest of the script... |
下面是一个使用
此示例将使用命令行参数(如果给定)。否则将提示用户输入。不管怎样,
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/env python3 import argparse parser = argparse.ArgumentParser() parser.add_argument('conversion_type', nargs='?') args = parser.parse_args() if args.conversion_type: conversion_type = args.conversion_type else: conversion_type = input('conversion_type: ') print(conversion_type) |
一个快速的黑客方法是检查
如果使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def get_provider(): print("Operations are ...", conversion_types ) conversion_type = input('Enter conversion ') def main(): if len(sys.argv) == 1: # only your file name conversion_type = get_provider() else: conversion_type = sys.argv[1] if __name__ == '__main__': main() ... the rest of the script... |
要获得更可持续的解决方案,请使用
看一下模块
1 2 3 4 5 6 7 | import sys if len(sys.argv) > 1: # There are arguments to the script else: # There aren't arguments to the script # use input to take arguments |