2011-01-09 2 views
3

, когда я принимаю аргументы, как я могу проверить, если два появляются в то же время без соединения условногопитон - sys.argv и флаг идентификации

т.е.

#!/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

Также см getopt. Он имеет немного более краткий синтаксис и полный пример в документах.

+0

Что вы подразумеваете под кратким синтаксисом? – tekknolagi

+0

С optparse вы обычно 'add_option()' для каждой опции. С getopt вы просто пишете что-то вроде 'options, fnames = getopt (" abf: ")', и это обрабатывает '-a',' -b' и '-f filename'. – 9000

+0

звучит отлично – tekknolagi

4

Я бы рекомендовал использовать argparse для го (или optparse, если вы находитесь на Python 2.6.x или старше).

Без модуля вы могли бы сделать это:

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

Но я предлагаю вам прочитать документацию argparse и узнать, как использовать его. Вы будете счастливы, что сделали.

+0

Как выполнить опцию parse? – tekknolagi

+0

Я не знаком с optparse, и это повод. – tekknolagi

5

Что-то вроде

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 ... 
+0

имеет смысл .... – tekknolagi

+0

что делает «по умолчанию» делать? просто любопытно, как я включил бы этот – tekknolagi

+0

новый в python, а не программирование – tekknolagi

Смежные вопросы