1

タイトルがよくわからないかもしれませんが、詳しく説明させてください。

ppmファイルを開き、選択したフィルター(回転...)を適用して新しい画像を作成するPythonスクリプトがあります。ここまではすべて正常に動作します。

しかし、次のようなLinuxコンソールで同じことをしたい:

ppmfilter.py ROTD /path/imageIn.ppm /path/imageOut.ppm

ここで ROTD は、回転を適用する関数の名前です。

これを行う方法がわかりません。これを可能にするライブラリを探しています。

あなたの助けを楽しみにしています。

PS: 私は python 2.7 を使用しています

4

4 に答える 4

7

比較的簡単な方法があります:

「globals()」を使用して、グローバル名 (関数、変数など) を決定できます。これにより、すべてのグローバル シンボルの辞書が得られます。タイプを (type() とモジュール タイプで) チェックする必要があるだけです。それが関数の場合は、sys.argv で呼び出すことができます。

import types
import sys

def ROTD(infile, outfile):
    # do something

if __name__ == '__main__':
    symbol = globals().get(sys.argv[1])
    if hasattr(symbol, '__call__'):
        symbol(*sys.argv[2:])

これにより、プログラムの引数 (ファイル名とコマンド名を除く) が関数に渡されます。

編集:エラー処理を忘れないでください。わかりやすくするために省略しました。

于 2010-11-21T12:20:32.963 に答える
1

main() 関数を使用します。

def main()
   # call your function here

if __name__ == "__main__":
   main()
于 2010-11-21T12:17:38.290 に答える
1

それを行う良い方法は{alias: function}、モジュール内で大きな辞書を定義することです。例えば:

actions = {
    'ROTD': ROTD,
    'REFL': reflect_image,
    'INVT': invIm,
}

あなたはアイデアを得る。次に、最初のコマンドライン引数を取り、それをこの辞書のキーとして解釈actions[k]し、残りの引数に適用します。

于 2010-11-21T12:40:14.590 に答える
0

ppmfilter.py mainこれを行うセクションで定義できます:

if __name__ == "__main__":
  import sys
  ROTD(sys.argv[1], sys.argv[2]) # change according to the signature of the function

そしてそれを呼び出します:python ppmfilter.py file1 file2

python -c*.py ファイルを含むディレクトリで実行することもできます。

python -c "import ppmfilter; ppmfilter.ROTD('/path/to/file1', '/path/to/file2')"
于 2010-11-21T12:20:56.567 に答える