我有一个名为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命令行正确传递给函数的正确方法是什么?
先谢谢
答案 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)
答案 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