5

当我接受参数时,如何检查两个是否同时出现而没有复合条件

IE

#!/usr/bin/python
import random, string
import mymodule
import sys

z = ' '.join(sys.argv[2:])
q = ''.join(sys.argv[3:])
a = ''.join(sys.argv[2:])
s = ' '.join(sys.argv[1:])
flags = sys.argv[1:5]

commands = [["-r", "reverse string passed next with no quotes needed."], ["-j", "joins arguments passed into string. no quotes needed."], ["--palindrome", "tests whether arguments passed are palindrome or not. collective."],["--rand","passes random string of 10 digits/letters"]]

try:
    if "-r" in flags:
        if "-j" in flags:
            print mymodule.reverse(q)
        if not "-j" in flags:
            print mymodule.reverse(z)

    if "-j" in flags:
        if not "-r" in flags:
            print a

    if "--palindrome" in flags: mymodule.ispalindrome(z)

    if (not "-r" or not "-j" or not "--palindrome") in flags: mymodule.say(s)

    if "--rand" in flags: print(''.join([random.choice(string.ascii_letters+"123456789") for f in range(10)]))

    if not sys.argv[1]: print mymodule.no_arg_error

    if "--help" in flags: print commands

except: print mymodule.no_arg_error

我只想说

如果标志中的“-r”和“-j”没有特定顺序:做任何事情

4

3 回答 3

7

就像是

import optparse

p = optparse.OptionParser()
p.add_option('--foo', '-f', default="yadda")
p.add_option('--bar', '-b')
options, arguments = p.parse_args()

# if options.foo and options.bar ...
于 2011-01-09T22:45:08.460 回答
4

我建议argparse为此使用(或者optparse如果您使用的是 Python 2.6.x 或更早版本)。

如果没有模块,你会这样做:

if "-r" in flags and "-j" in flags:
    do whatever

但我建议您阅读文档argparse并学习如何使用它。你会为你所做的感到开心。

于 2011-01-09T22:45:03.480 回答
0

另请参阅getopt。它有更简洁的语法,并在 docs 中有一个完整的示例。

于 2011-01-09T22:49:34.173 回答