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)
快速而肮脏的方式:
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。
| 归档时间: |
|
| 查看次数: |
42823 次 |
| 最近记录: |