3
if __name__=='__main__':
    parser = OptionParser()
    parser.add_option("-i", "--input_file", 
                    dest="input_filename",
                      help="Read input from FILE", metavar="FILE")

    (options, args) = parser.parse_args()
    print options

結果は

$ python convert.py -i video_*
{'input_filename': 'video_1.wmv'}

現在のフォルダーに video_[1-6].wmv があります。問題は、video_* が video_1.wmv になる理由です。私が間違っているのは何ですか?

4

4 に答える 4

8

Python はこれとは何の関係もありません。それはシェルです。

電話

$ python convert.py -i 'video_*'

そのワイルドカードで渡されます。

他の 6 つの値は、 にアタッチされずに引数として渡され、 を-i実行した場合とまったく同じようにpython convert.py -i video_1 video_2 video_3 video_4 video_5 video_6-iのみがすぐ次のパラメーターにアタッチされます。

とは言うものの、.argsを使用するのではなく、options.input.

于 2008-11-23T16:20:25.100 に答える
2

引数を出力すると、他のファイルがどこに行くのかがわかります...

それらは argv で個別の引数に変換され、optparse は最初の引数のみを input_filename オプションの値として受け取ります。

于 2008-11-23T16:20:51.290 に答える
1

明確にするために:

aprogram -e *.wmv

Linux シェルでは、すべてのワイルドカード (*.wmv) がシェルによって展開されます。したがってaprogram、実際に引数を受け取ります。

sys.argv == ['aprogram', '-e', '1.wmv', '2.wmv', '3.wmv']

チャールズが言ったように、引数を引用して文字通り渡すことができます。

aprogram -e "*.wmv"

これは次のように渡されます:

sys.argv == ['aprogram', '-e', '*.wmv']
于 2008-11-23T20:22:25.640 に答える
0

いくつかの標準 ( thisthisなど)を読んでも、明らかではありません。

コマンド ラインのargs部分は、ほとんどの場合、入力ファイルです。

入力ファイルがオプションとして指定されるのは、非常にまれな奇妙なケースだけです。それは起こりますが、非常にまれです。

また、出力ファイルの名前がargsになることはありません。ほとんどの場合、名前付きオプションとして提供されます。

アイデアは、

  1. ほとんどのプログラムは、stdin から読み取ることができます (そしてそうすべきです)。のコマンドライン引数は-「stdin」のコードです。引数が指定されていない場合、stdin がフォールバック プランです。

  2. プログラムでファイルを開く場合、コマンドラインで指定された無制限の数のファイルを開くこともできます。シェルは、ワイルドカードを展開することでこれを容易にします。[ただし、Windows はこれを行いません。]

  3. ファイルに書き込むための '-o somefile' のように、明示的なコマンド ライン オプションを指定せずに、プログラムでファイルを上書きしないでください。

cp、 、 は、これらの標準に従わないプログラムの大きな例であることにmv注意rmしてください。

于 2008-11-23T18:54:25.287 に答える