我想定义一个函数来检查是否有任何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。
答案 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: