展开目录
python 通过命令行参数直接调用方法
python命令行
X
陈尼玛的博客
记录开发生涯的踩坑经历,用时间来验证成长
加载中

用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

相关文档

暂无

随便看看

  1. 记一次nodejs内存泄漏的排查经历

  2. cnpm 立即同步

  3. css多行文本超出截断显示省略号

  4. css3 文字渐变色

  5. SSL certificate problem: self signed certificate in certificate chain

  6. ios13 vpn 能连接但不能传数据问题解决

  7. git删除远程分支

  8. html5 全屏代码

  9. heroku查看app使用时间

  10. 模拟307跳转情况

  11. git配置服务端支持http认证

  12. git 设置代理服务器

  13. mongodb2.4 添加用户

  14. mac搜索局域网内的主机

  15. sendmail用nginx做代理

  16. 树莓派配置wifi

  17. 简易版事件封装

  18. bootstrap modal弹框导致ie无法获取焦点

  19. 配置mysql ssl连接

畅言模块加载中