Python - 使用argparse比较我从命令行获得的字符串

时间:2013-11-15 20:16:18

标签: python string argparse

我遇到一个字符串比较的奇怪问题似乎源于我使用argparse模块从命令行获取值。基本上,我们的目标是获取一个服务器名称的数字,并从那里执行一些操作......

./this_script.py -p 3 -s serverA

数字相关选项效果很好,但由于某种原因,字符串相关选项无法通过我的错误检查。

相关代码如下:

parser.add_argument("-s", "--server", help="the server on which to act, either serverA or serverB")

然后进行错误检查(并且当前正在调试

if args.server:
    print "server given"
    print args.server
    if args.server is "serverA":
            print "server is " + args.server
    elif args.server is "serverB":
            print "server is " + args.server
    else:
            sys.stderr.write("error, invalid server given\n")
            sys.exit()

因此,当我调用脚本并将其传递给服务器参数时,它总是进入错误状态:

~> ./this_script.py -s serverA
server given
serverA
error, invalid server serverA given

我非常有信心这个问题来自args.server,好像我硬编码服务器名称然后它没有问题。

提前感谢您的任何帮助!

2 个答案:

答案 0 :(得分:3)

不要使用is进行相等性比较。它测试对象标识,并且您无法保证相等的字符串将使用相同的对象。请改用==

尝试

if args.server:
    print "server given"
    print args.server
    if args.server == "serverA":
            print "server is " + args.server
    elif args.server == "serverB":
            print "server is " + args.server
    else:
            sys.stderr.write("error, invalid server given\n")
            sys.exit()

答案 1 :(得分:0)

这看起来像个案choices

parser.add_argument('-s','--server',choices=['serverA','serverB'])

即使没有自定义帮助热线,也会显示错误消息:

usage: ipython [-h] [-s {serverA,serverB}]
ipython: error: argument -s/--server: invalid choice: 'serverC' (choose from 'serverA', 'serverB')

argparse使用的测试相当于args.server in ['serverA','serverB']