当我接受参数时,如何在没有复合条件
的情况下检查两个是否同时出现即
#!/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”没有特定的顺序: 做任何事情
答案 0 :(得分:6)
像
这样的东西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 ...
答案 1 :(得分:4)
我建议您使用argparse
(如果您使用的是Python 2.6.x或更早版本,则使用optparse
。)
如果没有模块,你可以这样做:
if "-r" in flags and "-j" in flags:
do whatever
但我建议你阅读argparse
的文档并学习如何使用它。你会很开心的。
答案 2 :(得分:0)
另见getopt
。它有一些简洁的语法,以及文档中的完整示例。