1

可能标题不是很清楚,让我详细说明一下。

我有一个 python 脚本,可以打开一个 ppm 文件,应用一个选择的过滤器(旋转...)并创建一个新图片。直到这里一切正常。

但我想通过 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 回答