使用命令行中的函数执行python脚本,Linux

时间:2011-10-07 18:48:36

标签: python linux shell command-line

我有一个名为convertImage.py的python文件,在文件中我有一个脚本可以将图像转换为我喜欢的,整个转换脚本都设置在一个名为convertFile(fileName)的函数中

现在我的问题是我需要从linux命令行执行这个python脚本,同时传递convertFile(fileName)函数。

示例:

 linux user$: python convertImage.py convertFile(fileName)

这应该执行传递适当函数的python脚本。

示例:

def convertFile(fileName):

    import os, sys
    import Image
    import string

    splitName = string.split(fileName, "_")
    endName = splitName[2]
    splitTwo = string.split(endName, ".")
    userFolder = splitTwo[0]

    imageFile = "/var/www/uploads/tmp/"+fileName

    ...rest of the script...

    return

执行此python脚本并将文件名从liunx命令行正确传递给函数的正确方法是什么?

先谢谢

3 个答案:

答案 0 :(得分:22)

if __name__ == "__main__":
    command= " ".join( sys.argv[1:] )
    eval( command )

这会奏效。但这太危险了。

您真的需要考虑命令行语法是什么。而且你需要考虑为什么要打破用于指定程序参数的历史悠久的Linux标准。

例如,您应该考虑删除示例中无用的()。反而是这样做。

python convertImage.py convertFile fileName

然后,您可以 - 通过很少的工作 - 使用argparse获取命令(“convertFile”)和参数(“fileName”)并在标准Linux命令行语法中工作。

function_map = { 
    'convertFile': convertFile,
    'conv': convertFile,
}
parser = argparse.ArgumentParser()
parser.add_argument( 'command', nargs=1 )
parser.add_argument( 'fileName', nargs='+' )
args= parser.parse_args()
function = function_map[args.command]
function( args.fileName )

答案 1 :(得分:4)

快速而肮脏的方式:

linux user$: python convertImage.py convertFile fileName

然后在convertImage.py

if __name__ == '__main__':
    import sys
    function = getattr(sys.modules[__name__], sys.argv[1])
    filename = sys.argv[2]
    function(filename)

更复杂的方法是使用argparse(适用于2.7或3.2+)或optparse

答案 2 :(得分:0)

创建脚本的顶级可执行部分,用于解析命令行参数,然后在调用中将其传递给函数,如下所示:

import os, sys
#import Image
import string


def convertFile(fileName):
    splitName = string.split(fileName, "_")
    endName = splitName[2]
    splitTwo = string.split(endName, ".")
    userFolder = splitTwo[0]

    imageFile = "/var/www/uploads/tmp/"+fileName

    print imageFile     # (rest of the script)

    return


if __name__ == '__main__':
    filename = sys.argv[1]
    convertFile(filename)

然后,从shell,

$ convertImage.py the_image_file.png
/var/www/uploads/tmp/the_image_file.png