使用特殊命令iceweasel执行脚本(这是Debian的火狐浏览器)
我遇到了一个问题,我想运行我的Python脚本,但需要用特定的命令来执行,比如这样:
iceweasel 'info.py server.py path_install.py'
这个命令必须在客户端输入,然后我们就可以打开一个页面,查看相关信息:
info.py (= os and ip of client)
server.py
path_install.py
但是我真的不知道该从哪里开始……
1 个回答
1
需求审查
看起来,你想要:
- 从命令行调用程序
- 传入任意数量的 Python 文件名
- 对于每个 Python 文件,打印一些关于该文件的详细信息
概念
- 使用
docopt
来解析命令行参数(argparse
、plac
等也是不错的选择) - 打印一些关于文件的信息(因为不太清楚你想报告哪些关于 Python 文件的细节,可以根据自己的需要修改)
iceweasel.py
"""
Usage:
iceweasel.py <pythonfile>...
iceweasel.py -h
Prints internal details for arbirtary set of <pythonfile> files.
"""
import os
def srcdetails(fname):
with open(fname) as f:
content = f.read()
shortname = os.path.split(fname)[-1]
size = len(content)
words = len(content.split())
templ = """
---- {fname} -----
short name: {shortname}
size: {size}
words: {words}
"""
print templ.format(**locals())
def main(pythonfiles):
for fname in pythonfiles:
srcdetails(fname)
if __name__ == "__main__":
from docopt import docopt
args = docopt(__doc__)
pythonfiles = args["<pythonfile>"]
main(pythonfiles)
使用方法
首先安装 docopt
$ pip install docopt
不带参数调用命令:
$ python iceweasel.py
Usage:
iceweasel.py <pythonfile>...
iceweasel.py -h
尝试帮助信息
$ python iceweasel.py -h
Usage:
iceweasel.py <pythonfile>...
iceweasel.py -h
Prints internal details for arbirtary set of <pythonfile> files.
对一个文件使用:
$ python iceweasel.py iceweasel.py
---- iceweasel.py -----
short name: iceweasel.py
size: 692
words: 74
对多个文件使用,使用通配符:
$ python iceweasel.py ../*.py
---- ../camera2xml.py -----
short name: camera2xml.py
size: 567
words: 47
---- ../cgi.py -----
short name: cgi.py
size: 612
words: 63
---- ../classs.py -----
short name: classs.py
size: 485
words: 44
结论
- 在 Python 中,命令行解析可以很简单
argparse
从 2.7 版本开始似乎是 Python 的标准部分argparse
功能强大,但需要比较复杂的多行调用plac
是一个不错的替代方案,在大多数情况下可以快速服务docopt
在我看来是最灵活的,同时所需的代码行数也最少
- 如果你不想在每次调用脚本时都输入
python
,还有其他选择- 在脚本的第一行使用 shebang
#!/usr/bin/env python
,设置为可执行,然后你甚至可以去掉.py
后缀。这只在 *nix 系统上有效,不适用于 Windows - 编写自己的
setup.py
来安装脚本。这在任何地方都有效,但需要多写一些代码。不过,如果你预期会有更多用户使用这个脚本,这可以大大简化安装过程,是一个非常有效的解决方案。
- 在脚本的第一行使用 shebang