Fno*_*ord 5 python command-line-interface ipython
简介:是否可以将iPython设置为普通用户(cd,ls,mkdir,rm等)的基本dos/bash命令行终端,然后公开一些额外的专有命令?
深度:我在一家视频游戏公司工作,用户从未在生产管道中体验过"好"的CLI.所以作为回应,我已经工作了一段时间在python中使用cmd.py编写CLI,重新创建常用的dos命令,然后使用我自己的自定义命令扩充它们以执行各种操作,例如:快速跳过预定义的生产文件夹,简化的perforce管理命令,使用递归的ant-glob模式查找/导入文件到我们的创作工具......等等......
在这个过程中,我偶然发现了ipython.我对它不是很熟悉,但我已经感觉到它应该是我应该使用的,因为它可以免费提供我想要的许多东西.它完美地处理了ansi的颜色.所有shell命令都可以通过"!"获得,可以免费使用"|,>,<"和所有内置的shell函数,其好处还在继续......
需要注意的是,我的目标受众很容易受到CLI的威胁......所以当他们输入"more textfile.txt"作为输入时,他们会期望打印文件内容的默认dos行为,而不是:
In [42]: more textfile.txt
File "<ipython-input-42-e442b4ca857b>", line 1
more file.txt
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
当然,"!more textfile.txt"会做他们期望的,但我不希望他们必须输入"!" 对于他们将使用的基本上95%的命令.
所以我正在寻找一种方式以一种完全简化的方式启动ipython,在我的理想(幻想或许)世界中:
作为奖励:一种在默认ipython和非常克制和简化的命令shell替换版本之间交替的方法,我梦想着... ex:输入"normal"将恢复所有ipython的默认行为......并输入"cli" "会回到简化版.
最后的注意事项:我正在寻找的可能是一个傻瓜的差事,我应该坚持使用我自己的笨拙的CLI脚本在命令shell中启动python.exe,并称它为一天......但我想如果我是像iPython这样做是远程可能的,Stackoverflow是我快速得到答案的地方:)
一种方法是使用cmd模块并执行您允许的所有命令。
非常简单的例子:
import cmd
import string, sys
class CLI(cmd.Cmd):
def __init__(self):
cmd.Cmd.__init__(self)
self.prompt = '> '
def do_hello(self, arg):
print "hello again", arg, "!"
def help_hello(self):
print "syntax: hello [message]",
print "-- prints a hello message"
def do_quit(self, arg):
sys.exit(1)
def help_quit(self):
print "syntax: quit",
print "-- terminates the application"
# shortcuts
do_q = do_quit
cli = CLI()
cli.cmdloop()
Run Code Online (Sandbox Code Playgroud)
输出:
$ python cmd-example-1.py
帮助
Documented commands (type help <topic>):
========================================
hello quit
Undocumented commands:
======================
help q
> hello world
hello again world !
> q
Run Code Online (Sandbox Code Playgroud)