如果参数传递到脚本

时间:2016-12-22 14:22:58

标签: python

我不能把这些全部放在一起...... 在我的脚本开头,我有一些用户输入来获取基本信息:

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...

4 个答案:

答案 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...

要获得更具可持续性的解决方案,请使用图书馆argparse。这个answer可能会帮助您入门。

答案 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是该函数的默认参数