检查是否在函数内定义了sys.argv

时间:2016-05-30 09:46:59

标签: python function argv

我想定义一个函数来检查是否有任何argv被赋予命令行,否则会打印一个字符串或返回两个字符串。这是代码:

context.ChangeTracker.Entries()
        .Where (t => t.State == EntityState.Modified)

我尝试像这样调用函数:

import sys

def get_input():
    if len(sys.argv) > 1:
        path_input_text = sys.argv[1]
        path_basic_conf = sys.argv[2]
        return path_input_text, path_basic_conf
    elif len(sys.argv) == 1:
        print "Takes at least two arguments"
    else:
        print "No arguments entered"
        return 'file.txt', 'file.xml'

当我给出两个参数时它起作用,但在其他两种情况下失败,即elif和else语句。我怎样才能使它工作?我应该使用try / except语句吗?感谢

编辑1

当我只尝试1个args时:

a,b = get_input()

当我尝试没有args时:

IndexError: list index out of range

在给出1个args的情况下,我想引发一个错误,而不是返回None,None。

2 个答案:

答案 0 :(得分:1)

argv [0]是脚本名称(取决于操作系统是否为完整路径名)。如果使用解释器的-c命令行选项执行命令,则将argv [0]设置为字符串'-c'。如果没有脚本名称传递给Python解释器,则argv [0]为空字符串。 (参考:https://docs.python.org/2/library/sys.html

试试这个:

import sys
def get_input():
    if len(sys.argv) > 2:
        #print (sys.argv[0])
        path_input_text = sys.argv[1]
        path_basic_conf = sys.argv[2]
        return path_input_text, path_basic_conf
    elif len(sys.argv) ==2:
        #print (sys.argv[0])
        print ("Takes at least two arguments")
        return None,None
    else:
        #print (sys.argv[0])
        print ("No arguments entered")
        return 'file.txt', 'file.xml'

a,b = get_input()
print (a)
print (b)

输出:

D:\>python so.py 1
Takes at least two arguments
None
None

D:\>python so.py
No arguments entered
file.txt
file.xml

D:\>python so.py 1 2
1
2

答案 1 :(得分:0)

在一个案例中你没有返回任何东西,你应该返回一些东西: 没有例如。

elif len(sys.argv) ==1:
    print "Takes at least two arguments"

应该是:

elif len(sys.argv) ==1:
    print "Takes at least two arguments"
    return None,None

您的长度应从2开始

if len(sys.argv) > 2: