如何用Python编写交互式shell?

时间:2016-02-02 16:34:44

标签: python shell python-3.x

运行python脚本是可能,就好像它是命令行解释器一样,例如:

from sys import argv

argv=argv[1:]
str=''.join(argv)
import os
def ls():
    x=os.listdir(os.getcwd())
    for file in x:
        print(file)
if str =='ls':
    ls()

在这种情况下我使用argv传递参数,但是我可以希望代码的行为类似于命令行解释器并调用我的函数示例:

的MyScript> LS file.py 的MyScript>

注意:对不起,如果我没有清楚地解释我的想法,英语不是我的母语。

更新:有些人说我的问题是重复的,问题是this,但我重复一遍,我想让“交互式shell”不是“如何在Windows中执行Python脚本” “

3 个答案:

答案 0 :(得分:2)

经过长时间的搜索,我发现了一个名为 cmdln 的模块,它提供了执行此类任务的最佳功能,例如:

import cmd

class HelloWorld(cmd.Cmd):
    """Simple command processor example."""

    def do_greet(self, line):
        print ('hello')

    def do_EOF(self, line):
           #this command will make you exit from the shell
        return True

if __name__ == '__main__':
    HelloWorld().cmdloop()

运行脚本时,它将类似于:

(Cmd) greet
hello
(Cmd) print
string
(cmd) EOF

然后shell将停止,感谢所有试图帮助我的人。

答案 1 :(得分:2)

如果我理解正确,你需要一个REPL,它可以像你自己的ls版本一样使用python。这个答案基于上述假设。

人们实际上已经这样做了,例如xonsh使用python-prompt-toolkit。建议您使用框架来缩短开发时间。 如果你想从头开始,想法是使用循环等待命令,执行函数,打印然后等待

答案 2 :(得分:-2)

是的,请查看hashbang

基本上,您只需将其添加为文件中的第一行

#!/usr/bin/env python

还将文件模式更改为可执行文件

chmod +x yourfile.py

您将能够将该文件作为常规命令执行。关键在于,它只是为您的文件调用适当的解释(并使用hashbang,您只需指定所需的解释器)。