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

kni*_*dan 11 python linux shell command-line

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

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

例:

 linux user$: python convertImage.py convertFile(fileName)
Run Code Online (Sandbox Code Playgroud)

这应该执行传递适当函数的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
Run Code Online (Sandbox Code Playgroud)

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

谢谢高级

S.L*_*ott 22

这个

if __name__ == "__main__":
    command= " ".join( sys.argv[1:] )
    eval( command )
Run Code Online (Sandbox Code Playgroud)

这会奏效.但它非常危险.

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

例如,您应该考虑删除示例中的无用()的.相反,做到这一点.

python convertImage.py convertFile fileName
Run Code Online (Sandbox Code Playgroud)

然后,您可以 - 用很少的工作 - 用于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 )
Run Code Online (Sandbox Code Playgroud)

  • 通过大多数解决Y来简单回答X的良好组合 (2认同)

Eth*_*man 6

快速而肮脏的方式:

linux user$: python convertImage.py convertFile fileName
Run Code Online (Sandbox Code Playgroud)

然后在convertImage.py中

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

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