2011-01-09 6 views
3

私はのpython - 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 

条件付き化合物を持つことなく、私は2つが同時に現れているかどうかを確認どのように行うの引数を受け入れるとき、私はできるようにしたいです順不同でフラグに「-j」「-r」場合

を言うとする: ことは何でも

答えて

0

よう

+0

簡潔な構文はどういう意味ですか? – tekknolagi

+0

optparseでは、一般に各オプションに対して 'add_option()'を実行します。 getoptでは 'options、fnames = getopt(" abf: ")'のようなものを書きます。これは '-a'、' -b'、 '-f filename'を扱います。 – 9000

+0

素晴らしい音 – tekknolagi

4

私は目のためにargparseを使用してお勧めしますPython 2.6.x以前であればoptparseです。

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

をしかし、私はあなたが​​のドキュメントを読んで、それを使用する方法を学ぶお勧め:

モジュールがなければ、あなたはこれを行うだろう。あなたはあなたが幸せになるでしょう。

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

optの構文解析はどのように機能しますか? – tekknolagi

+0

私はoptparseに精通しておらず、それが理由です。 – tekknolagi

5

何かまたgetoptを参照してください。それはもう少し簡潔な構文と完全な例をドキュメントで持っています。

+0

は理にかなっています.... – tekknolagi

+0

"default"は何をしますか?ちょうど私がその – tekknolagi

+0

をPythonに組み込んだり、プログラミングしたりするのではなく、 – tekknolagi