2

以下を機能させる方法はありますか?私が探しているのは、別のオプションの値に基づいて、あるオプションの値を持つことです。

import optparse
parser = optparse.OptionParser()

parser.add_option("--file-name", default="/foo/bar", dest="file_name")

parser.add_option("--file-action", 
    default="cp %s /bar/baz" % (options.file_name), 
    dest="fileaction")

options, args = parser.parse_args()

明らかに、現時点では機能しません。

割り当て前に参照されるローカル変数 'options'

4

3 に答える 3

1

両方を持っているだけです:

parser.add_option("--file-name", dest="file_name")
parser.add_option("--file-action", dest="file_action")

簡単なロジックを使用できます。

if options.file_name:
    #do code relating to file_action

あるいは

if options.file_action and not options.file_name:
    raise ValueError("No Filename specified")
# do your code here.
于 2012-12-11T13:00:03.170 に答える
0

後でデフォルトをマッサージする必要があります。オプションがデフォルトの場合は、マッサージを行います。

parser.add_option("--file-action", 
    default="cp <filename> /bar/baz", 
    dest="fileaction")

options, args = parser.parse_args()

if options.fileaction == "cp <filename> /bar/baz":
    options.fileaction = "cp %s /bar/baz" % (options.file_name)

とはいえ、この例では fileaction と filename が競合しているように見えるため、両方を同時に設定しても意味がありません。明らかではない方法で互いに上書きされます。fileaction のデフォルトをにし、 for"cp"を追加してから、これらの部分から呼び出しを構築します。--action-target'/bar/baz'

于 2012-12-11T12:58:28.997 に答える
0

パーサーはハンドラーです。プログラム起動時に受け取ったコマンドラインで何をするかをpythonに説明します。したがって、オプションに依存関係があるのは正しくありません。

私がお勧めするのは、コードのデフォルトの動作に対処することです。次のようなことができます:

parser.add_option("--file-action", 
default=None, 
dest="fileaction")

options, args = parser.parse_args()

# Manage the default behaviour
if not options.fileaction:
    fileaction = "cp %s /bar/baz" % (options.file_name)
    # You could then use fileaction the way you would use options.fileaction
于 2012-12-11T13:06:30.503 に答える