从Linux控制台运行.py文件中的函数
也许标题不太清楚,我来详细说一下。
我有一个Python脚本,它可以打开一个ppm文件,应用一个选定的滤镜(比如旋转等),然后生成一张新图片。到这里一切都运行得很好。
但是我想通过Linux命令行来做同样的事情,比如这样:
ppmfilter.py ROTD /path/imageIn.ppm /path/imageOut.ppm
这里的ROTD是用来进行旋转的函数名。
我不知道该怎么做,我在寻找一个可以让我实现这个功能的库。
期待你的帮助。
附注:我使用的是Python 2.7。
4 个回答
1
一个不错的方法是在你的模块里定义一个大字典 {别名: 函数}
。比如:
actions = {
'ROTD': ROTD,
'REFL': reflect_image,
'INVT': invIm,
}
你明白这个意思了吧。然后你可以拿到第一个命令行参数,把它当作这个字典的一个键,接着把 actions[k]
应用到其余的参数上。
1
使用 main() 函数:
def main()
# call your function here
if __name__ == "__main__":
main()
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:])
这样就可以把程序的参数(不包括文件名和命令名称)传递给这个函数。
补充一下:请不要忘记处理错误。我为了让内容更清晰而省略了这部分。