4

私は現在、Python optparse モジュールの使用方法を学んでいます。次のサンプル スクリプトを試していますが、args 変数が空になります。Python 2.5 と 2.6 を使用してこれを試しましたが、役に立ちませんでした。

import optparse

def main():
  p = optparse.OptionParser()
  p.add_option('--person', '-p', action='store', dest='person', default='Me')
  options, args = p.parse_args()

  print '\n[Debug]: Print options:', options
  print '\n[Debug]: Print args:', args
  print

  if len(args) != 1:
    p.print_help()
  else:
    print 'Hello %s' % options.person

if __name__ == '__main__':
  main() 

出力:

>C:\Scripts\example>hello.py -p Kelvin

[Debug]: Print options: {'person': 'Kelvin'}

[Debug]: Print args: []

Usage: hello.py [options]

オプション: -h, --help このヘルプ メッセージを表示して終了します -p PERSON, --person=PERSON

4

4 に答える 4

7

この変数は、オプションに割り当てられていないargs引数を保持します。オプション変数に代入することで、コードは実際に正しく機能しています。Kelvinperson

を実行しようとすると、まだ値が割り当てられていることがhello.py -p Kelvin file1.txtわかります。person"Kelvin"args"file1.txt"

次のドキュメントoptparseも参照してください。

parse_args() 次の 2 つの値を返します。

  • options、すべてのオプションの値を含むオブジェクト—たとえば--file、単一の文字列引数を取る場合、ユーザーoptions.fileが指定したファイル名になるNoneか、ユーザーがそのオプションを指定しなかった場合
  • args、オプションの解析後に残った位置引数のリスト
于 2010-04-21T16:31:57.070 に答える
1

optparseヘルプによると:

「成功すると、ペア (値、引数) が返されます。ここで、'values' は Values インスタンス (すべてのオプション値を含む) であり、'args' はオプションの解析後に残った引数のリストです。」

試してみてくださいhello.py -p Kelving abcd- 'Kelvin' は optparse によって解析され、'abcd' はargsによって返される変数に格納されます。parse_args

于 2010-04-21T16:37:39.240 に答える
0
import ast

(options, args) = parser.parse_args()
noargs = ast.literal_eval(options.__str__()).keys()
if len(noargs) != 1:
    parser.error("ERROR: INCORRECT NUMBER OF ARGUMENTS")
    sys.exit(1)
于 2014-10-31T12:05:47.337 に答える
0

注: "options" は、追加したオプションを含む辞書です。「Args」は、解析されていない引数のリストです。長さ「args」を見ないでください。説明するためのトランスクリプトを次に示します。

moshez-mb:profile administrator$ cat foo
import optparse

def main():
    p = optparse.OptionParser()
    p.add_option('--person', '-p', action='store', dest='person', default='Me')
    options, args = p.parse_args()
    print '\n[Debug]: Print options:', options
    print '\n[Debug]: Print args:', args
    print
    if len(args) != 1:
        p.print_help()
    else:
        print 'Hello %s' % options.person

if __name__ == '__main__':
    main()
moshez-mb:profile administrator$ python foo

[Debug]: Print options: {'person': 'Me'}

[Debug]: Print args: []

Usage: foo [options]

Options:
  -h, --help            show this help message and exit
  -p PERSON, --person=PERSON
moshez-mb:profile administrator$ python foo -p Moshe

[Debug]: Print options: {'person': 'Moshe'}

[Debug]: Print args: []

Usage: foo [options]

Options:
  -h, --help            show this help message and exit
  -p PERSON, --person=PERSON
moshez-mb:profile administrator$ python foo -p Moshe argument

[Debug]: Print options: {'person': 'Moshe'}

[Debug]: Print args: ['argument']

Hello Moshe
moshez-mb:profile administrator$ 
于 2010-04-21T16:36:42.127 に答える