用python编写批处理脚本时,为了方便外部程序调用,我希望把一些交互命令直接从命令行读入方法名和参数,然后执行对应的内部方法。
设计的目标是输入的参数大于等于1个,第一个参数是方法名,后面的参数是方法对应的参数。
比如说这样一个命令行:
x.py add --a=1 --b=2
对应的python脚本:
def add(a,b): print int(a)+int(b)
于是我实现了以下方法:
try:
c={}
import sys;
argv=sys.argv
# sys.argv第一个是自身文件名,第二个开始为命令行参数
if len(argv)<2: raise Exception("command argv too short")
for i in range(2, len(argv)):
a=argv[i]
# 支持两种额外参数格式
# --xx=yy,表示参数xx的值为yy
# zz,表示参数zz的值为True
a=a[0:2]=='--' and a[2:].split('=',1) or [a]
c[a[0]]=len(a)>1 and a[1] or True
f=argv[1]
if not globals().has_key(f):
raise Exception("function `"+f+"` not exists")
apply(globals()[f],(),c)
except Exception,e: print 'Error: '+e.message
完整示例:
def add(a,b): print int(a)+int(b)
def minus(a,b): print int(a)-int(b)
try:
c={}
import sys;
argv=sys.argv
if len(argv)<2: raise Exception("command argv too short")
for i in range(2, len(argv)):
a=argv[i]
a=a[0:2]=='--' and a[2:].split('=',1) or [a]
c[a[0]]=len(a)>1 and a[1] or True
f=argv[1]
if not globals().has_key(f):
raise Exception("function `"+f+"` not exists")
apply(globals()[f],(),c)
except Exception,e: print 'Error: '+e.message
# x.py add --a=10 --b=2
# x.py minus --a=10 --b=2
相关文档
暂无
随便看看
畅言模块加载中