使用sys.argv检索不同的功能

时间:2018-06-29 20:35:50

标签: 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])
elif '-m' or '-missing'in sys.argv:
    print(function4)
elif 'r' or '-range' in sys.argv:
    print(function5)
else:
    exit

应该在bash终端中从用户输入字母。 显示帮助方法有效,并且能够显示所有字符串。 -f输入工作并显示我在该函数中需要的内容,但是代码只是从函数1中而不是从function2中吐出内容,依此类推。

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

2 个答案:

答案 0 :(得分:3)

要测试两个值中的任何一个是否在列表中,不能将or运算符与in运算符一起使用。您需要使用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

答案 1 :(得分:2)

我强烈建议使用 argparse

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

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])

通过创建字典,您可以只查找键。

它可以使代码更干净,更快,更可维护。