我不能把这些全部放在一起...... 在我的脚本开头,我有一些用户输入来获取基本信息:
def get_provider():
print("Operations are ... ", conversion_type )
conversion = input('Enter conversion ')
这(以及其他一些用户输入部分)是驱动脚本其余部分的原因。
我希望能够传递变量,并使用argv设置变量,而不是使用用户输入部分。这更多用于调试目的。我不想删除用户输入部分。如果args被传入,请跳过。
我认为解决方案围绕argv解析和if __name__ == "__main__": ...
,但正如我所说,我不能完全把它放在一起。
这是我尝试过的一个例子,它不太起作用:
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...
答案 0 :(得分:1)
一种快速的黑客方式(我正在写这个,因为你想快速调试)是检查argv
的长度。如果长度超过1
,那么您有len(sys.argv) - 1
个参数,因为第一个元素是文件名。假设您有一个数字作为输入。
如果您使用 python script.py
来运行脚本,此解决方案将有效。请注意,如果您使用的是更复杂的东西。
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 :(得分:1)
以下是使用argparse
的可选位置参数的示例。
如果给定,此示例将使用命令行参数。否则会提示用户输入。无论哪种方式,conversion_type
都会被填充。
#!/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)
答案 2 :(得分:0)
查看模块sys
。
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
答案 3 :(得分:0)
如果有人来这里寻找单线以防出现默认参数,那么
email = combo if combo else input("Enter e-mail or combo: ")
其中combo
是该函数的默认参数