Python 使用sys.argv检索不同的函数

Python 使用sys.argv检索不同的函数,python,python-3.x,argv,sys,Python,Python 3.x,Argv,Sys,假设我有以下几行代码: if __name__ == '__main__': if '-h' in sys.argv: show_help() elif '-f' or 'function'in sys.argv: print(function1) elif '-n'or '-name' in sys.argv: print(function2) elif '-e' or '-extension'in sys.argv: print(function3]) eli

假设我有以下几行代码:

if __name__ == '__main__':
if '-h' in sys.argv:
    show_help()
elif '-f' or 'function'in sys.argv:
    print(function1)
elif '-n'or '-name' in sys.argv:
    print(function2)
elif '-e' or '-extension'in sys.argv:
    print(function3])
elif '-m' or '-missing'in sys.argv:
    print(function4)
elif 'r' or '-range' in sys.argv:
    print(function5)
else:
    exit
这些字母应该是用户在bash终端中输入的。 显示help方法有效,并且它能够显示所有字符串。 f输入可以工作并显示我在该函数中需要的内容,但是代码只是从函数1中吐出内容,而不是从函数2中吐出内容,依此类推

我如何获得这些不同的字母,-f,-n,-e,-m(如果输入)来执行该功能并吐出该信息?
还有没有一种更有效的方法可以在不使用argparse的情况下为初学者编写Python脚本

要测试两个值中的任何一个是否在列表中,您不能将
运算符与
中的
运算符一起使用。您需要使用
操作符中的
单独测试每个值,如下所示:

if '-h' in sys.argv:
    show_help()
elif '-f' in sys.argv or '-function' in sys.argv:
    print(function1)
elif '-n' in sys.argv or '-name' in sys.argv:
    print(function2)
elif '-e' in sys.argv or '-extension'in sys.argv:
    print(function3])
elif '-m' in sys.argv or '-missing'in sys.argv:
    print(function4)
elif '-r' in sys.argv or '-range' in sys.argv:
    print(function5)
else:
    exit

要测试两个值中是否有任何一个在列表中,您不能将
运算符与
in
运算符一起使用。您需要使用
操作符中的
单独测试每个值,如下所示:

if '-h' in sys.argv:
    show_help()
elif '-f' in sys.argv or '-function' in sys.argv:
    print(function1)
elif '-n' in sys.argv or '-name' in sys.argv:
    print(function2)
elif '-e' in sys.argv or '-extension'in sys.argv:
    print(function3])
elif '-m' in sys.argv or '-missing'in sys.argv:
    print(function4)
elif '-r' in sys.argv or '-range' in sys.argv:
    print(function5)
else:
    exit

我强烈建议使用

如果您不愿意,也可以创建一个标志字典:

flags = {
    '-h': show_help, 
    '-f': function1,
    '-function': function1,
    '-n': function2,
    '-name': function2,
    '-e': function3,
    '-extension': function3,
    '-m': function4,
    '-missing': function4,
    '-r': function5,
    '-range': function5,
}
if __name__ == '__main__':
    for flag in sys.argv:
        print(flags[flag])
通过创建字典,您只需查找键即可


它产生了更干净、更快、更易于维护的代码。

我强烈建议使用

如果您不愿意,也可以创建一个标志字典:

flags = {
    '-h': show_help, 
    '-f': function1,
    '-function': function1,
    '-n': function2,
    '-name': function2,
    '-e': function3,
    '-extension': function3,
    '-m': function4,
    '-missing': function4,
    '-r': function5,
    '-range': function5,
}
if __name__ == '__main__':
    for flag in sys.argv:
        print(flags[flag])
通过创建字典,您只需查找键即可


它可以产生更干净、更快、更易于维护的代码。

您可以检查它是否位于sys.argv。。。当你通过-n时也是如此。使用click进行此操作,与argparse相比比较简单。我建议使用argparse模块。不要再发明轮子了。使用or。作为python中的noobie,我想尝试一些更简单的方法。但我会看看的!检查它是否在sys.argv中。。。当你通过-n时也是如此。使用click进行此操作,与argparse相比比较简单。我建议使用argparse模块。不要再发明轮子了。使用or。作为python中的noobie,我想尝试一些更简单的方法。但我会看看的!这是非常低效的,如果要进行重复的包含检查,至少要将参数转换成一个集。如何为重复检查创建一个集?
set(sys.argv)
@zwer您不需要集,您需要字典。这是一个更好的总体设计。这是非常低效的,如果你要做重复的包含检查,至少要把参数转换成一个集。如何为重复检查创建一个集?
set(sys.argv)
@zwer你不需要集,你需要字典。这是一个更好的整体设计。谢谢。我完全忘记了创建字典和使用for循环。谢谢。我完全忘记了创建字典和使用for循环。