3

「cp」コマンドのように、スクリプトがコマンドライン引数を受け入れるようにします。

'''
Usage:
cp.py <source>... <directory>
cp.py -t <directory> <source>...
cp.py -s <source>... -t <directory>
'''

それらのコマンドライン

$ python cp.py src/path/1 src/path/2 target/path
$ python cp.py -t target/path src/path/1 src/path/2
$ python cp.py -s src/path/1 src/path/2 -t target/path

同じ結果が得られます:

{'<source>':['src/path/1', 'src/path/2'],'<directory>': 'target/path'}

どうも。そして私の英語でごめんなさい:)

4

2 に答える 2

2

現在サポートされていません

このような機能を夢見ているのはあなただけではありません。docopt issue #190位置引数の繰り返しとそれに続く単一の位置引数を参照してください。

オプションに続く引数の繰り返しのあいまいさ

繰り返し位置引数に続くオプションは、解析をあいまいにします。コマンドオプションと同じ名前のファイルを想像してみてください。どのように指定し、結果として何を期待しますか?

提案された代替案 (コマンド ライン デザインの変更)

ユーザーにとって直感的になるように、ターゲットディレクトリを最後に配置することを好むと思います。

値を持つ繰り返しオプション

Usage:
    cp.py  (-s <source>)... -t <directory>

これにより、1 つのターゲット ディレクトリと複数のソースが可能になります。

繰り返される引数を最後の引数として配置

Usage:
    cp.py <directory> <source>...

これは、ターゲットが最後のものであるという設定を破りますが、非常に簡単です。

結論

  • 現在docoptはスタイルをサポートしていませんcpが、使用しています。理由の 1 つは簡単ではないこと、もう 1 つcpは複雑すぎてあいまいでさえあることです。
  • 繰り返し引数の後にオプションを使用するのは常に注意が必要です。それを避けるようにしてください。
  • オプションはオプションであるため、必須のオプションを使用することは、コマンド ライン プログラムを使いやすくするためのこの規則に反します。
  • 現在、私の好みは、ターゲット引数を最初の位置引数として使用し、その後にソース位置引数を繰り返し使用することです。
  • docopt複数の位置引数の後に固定の位置引数のセットが続くことを許可するとよいのですが、これは現在実装されていません。
于 2014-06-27T20:09:21.660 に答える