可能标题不是很清楚,让我详细说明一下。
我有一个 python 脚本,可以打开一个 ppm 文件,应用一个选择的过滤器(旋转...)并创建一个新图片。直到这里一切正常。
但我想通过 linux 控制台做同样的事情,比如:
ppmfilter.py ROTD /path/imageIn.ppm /path/imageOut.ppm
这里 ROTD 是应用旋转的函数的名称。
我不知道该怎么做,我正在寻找一个允许我这样做的库。
期待您的帮助。
PS:我正在使用python 2.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:])
这会将程序参数(不包括文件名和命令名)传递给函数。
编辑:请不要忘记错误处理。为了清楚起见,我省略了它。
使用 main() 函数:
def main()
# call your function here
if __name__ == "__main__":
main()
一个很好的方法是{alias: function}
在你的模块中定义一个大字典。例如:
actions = {
'ROTD': ROTD,
'REFL': reflect_image,
'INVT': invIm,
}
你明白了。然后获取第一个命令行参数并将其解释为该字典的键,应用于actions[k]
其余参数。
您可以在您的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')"