从Linux控制台运行.py文件中的函数

1 投票
4 回答
1829 浏览
提问于 2025-04-16 07:24

也许标题不太清楚,我来详细说一下。

我有一个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:])

这样就可以把程序的参数(不包括文件名和命令名称)传递给这个函数。

补充一下:请不要忘记处理错误。我为了让内容更清晰而省略了这部分。

撰写回答