python开发命令行脚本

Python018

python开发命令行脚本,第1张

工作中会经常需要写一些命令行脚本,如果还是用if,else判断用户输入实在是太丑陋了。这里介绍几个python里的命令行脚本库,可以帮助我们快速开发好用的命令行脚本。

https://docs.python.org/3/library/cmd.html

使用方式是继承Cmd,实现自己的子类。

参数comletekey是自动补全操作,默认值是Tab, 如果不为None 且readline可用的话,命令会自动完成。

这里的readline指的是python实现的 GNU readline 接口(标准python库里没有,Windows系统不支持)。

参数stdin,stdout是输入输出流,默认是sys.stdin,sys.stout。

cmd提供了一个简单的框架,但是功能比较简单,python还有其他的很多第三方库可以用来写命令行程序。

https://www.cnblogs.com/xueweihan/p/12293402.html 这篇文章对比了各个库的功能,贴在这里:

看起来fire是最简单的,来试一下。

fire 则是用一种面向广义对象的方式来玩转命令行,这种对象可以是类、函数、字典、列表等,它更加灵活,也更加简单。你都不需要定义参数类型,fire 会根据输入和参数默认值来自动判断,这无疑进一步简化了实现过程。

以下示例为 fire 实现的 计算器程序:

从上述示例可以看出,fire 提供的方式无疑是最简单、并且最 Pythonic 的了。我们只需关注业务逻辑,而命令行参数的定义则和函数参数的定义融为了一体。

不过,有利自然也有弊,比如 nums 并没有说是什么类型,也就意味着输入字符串'abc'也是合法的,这就意味着一个严格的命令行程序必须在自己的业务逻辑中来对期望的类型进行约束。

我在运行RH-Linux和python2.6.6的服务器上运行python脚本有一个问题。当我运行任何脚本并产生异常时,该脚本将挂起,直到我按下CTRL-C,然后它打印回溯信息。当我从命令行运行脚本而不直接调用python时,就会发生这种情况,使用脚本第一行的shebang。如果我通过调用python来执行脚本,就不会出现相同的挂起问题。我搜索过并看到过类似的问题,但它们都与特定的库有关,所有python脚本都会出现这种情况。我尝试过使用相同脚本的不同服务器,但没有出现问题。我已经包括了一个简单的脚本,我一直在测试。它试图打开一个不存在的文件。在

#!/usr/bin/env python

tempfile = open('noexists.txt','r')

当我将代码执行为“测试.py“在命令行上,我得到以下响应:

^{pr2}$

如果我把它作为“python”执行测试.py“然后我得到如下回应:

~/bin$>python test.py

Traceback (most recent call last):

File "test.py", line 2, in <module>

tempfile = open('noexists.txt','r')

IOError: [Errno 2] No such file or directory: 'noexists.txt'

这里很难区分,但在执行时非常明显。查看第一个示例输出,注意在回溯之前有“^C”。在我按下CTRL-C之前,脚本一直挂着。第二个示例输出立即返回异常的回溯而不挂起。在

我试着把剧本移到一个新的地方,把shebang从#改为#!/usr/bin/python到#!/usr/bin/env python和不同的脚本。在任何情况下,他们的行为都是一样的。任何帮助都将不胜感激。我不想使用“python”格式调用所有python脚本。在

1.不修改数据库与系统结构,使用Python做个定时策略,每隔一段时间来执行【特定条件是否达到】的统计SQL脚本。这种模式适用于数据量不多,或者每次执行的统计脚本时间短,或者实时性要求低的情况。

2.修改数据库,不改系统结构。那就是使用数据库的触发器,或者存储过程,来充当抽象接口。通过抽象接口,来进行实时统计,但这样做,压力就集中在数据库这边,而且随着数据量的增长,这种依赖于数据库本身功能的结构,不容易优化。

3.同时修改数据库与系统结构,用编程语言比如Python来写中间件,进行实时统计,并把统计结果保存到数据库。这就让压力转移到中间件上,而且随着数据量的增大,很容易把中间件做成多节点的集群模式来分担压力。