python命令行输入多行_python cmdln命令行终端持续运行模块使用教程

Python命令行运行的解析库有多种,如:argarse、docopt、click、invoke等,其中Argarse为python内置标准库,使用较为频繁,但用起来也较为麻烦。下面折叠部分为几种模块的基本用法,如果有时间可以具体了解。今天要分享的是一个非常好用的命令行持续运行的库 cmdln,是在python内置模块cmd的基础上进一步封装的开源项目。

260

一、cmdln库的优点

1.cmdln是在cmd模块基础上的封装,使用上和cmd一样简单,将函数名添加前缀do_即可实现函数通过命令行运行;

2.实现了类似Tkinter的mainloop方法,能够通过命令行单次执行,或多次执行,保持会话持续在终端运行,有点类似于ipython编辑器;

3.cmdln提供了方面便的函数解析功能,将命令参数进行自动解析,不需要重新造轮子编写参数解析函数;

4.有时代码中实现的函数命令功能较多,若手动整理有多少函数功能就会非常麻烦,cmdln库提供了一种方便的集成帮助,直接将所有函数进行整理并形成命令列表,方便查看有哪些命令及如何使用。同时,对每一个函数也提供了帮助信息,如:需要怎样使用该命令,需要哪些参数,每个参数是什么作用,最后的返回结果是什么等。

二、cmdln的使用方法

在了解cmdln使用之前先初步了解一下cmd模块的方法介绍及使用案例:

(1)cmdloop():类似与Tkinter的mainloop,运行Cmd解析器;

(2)onecmd(str):读取输入,并进行处理,通常不需要重载该函数,而是使用更加具体的do_command来执行特定的命令;

(3)emptyline():当输入空行时调用该方法;

(4)default(line):当无法识别输入的command时调用该方法;

(5)completedefault(text,line,begidx,endidx):如果不存在针对的complete_*()方法,那么会调用该函数,该函数主要是用于tab补充,且只能在linux下使用。

(6)precmd(line):命令line解析之前被调用该方法;

(7)postcmd(stop,line):命令line解析之后被调用该方法;

(8)preloop():cmdloop()运行之前调用该方法;

(9)postloop():cmdloop()退出之后调用该方法;

(10)help_command():对command命令的说明,其中command为可变字符

from cmd import Cmd

import os

class Client(Cmd):

u"""help

这是doc

"""

prompt = 'pyFun>'

intro = 'Welcom to pyFun!'

def __init(self):

Cmd.__init__(self)

def do_hello(self, arg):

print('hello', arg)

def do_exit(self, arg):

print('Bye!')

return True  # 返回True,直接输入exit命令将会退出

def preloop(self):

print("print(this line before entering the loop")

def postloop(self):

# print('Bye!')

print("print this line after leaving the loop")

def precmd(self, line):

print("print(this line before do a command")

return Cmd.precmd(self, line)

def postcmd(self, stop, line):

print("print(this line after do a command")

return Cmd.postcmd(self, stop, line)

if __name__ == '__main__':

try:

os.system('cls')

client = Client()

client.cmdloop()

except:

exit()

cmdln也与之类似,包括了alias命令别称,option命令参数,命令持续运行svn.main(loop=LOOP_ALWAYS)等,同时输入help 命令名 则可以输出对应该条命令的说明文档,

内置的说明文档变量有如下几个:

"${name}" 工具名称

"${option_list}" 参数列表

"${command_list}" 命令列表

"${help_list}" 参数帮助列表

"${cmd_name}" 命名名称

"${cmd_usage}" 命令帮助信息

"${cmd_option_list}" 命令参数信息列表

import sys

import cmdln

class MySVN(cmdln.Cmdln):

name = "svn"

@cmdln.alias("stat", "st")

@cmdln.option("-u", "--show-updates", action="store_true",

help="display update information")

@cmdln.option("-v", "--verbose", action="store_true",

help="print extra information")

def do_status(self, subcmd, opts, *paths):

"""${cmd_name}: print the status of working copy files and directories

${cmd_usage}

${cmd_option_list}

"""

print("'svn %s' opts:  %s" % (subcmd, opts))

print("'svn %s' paths: %s" % (subcmd, paths))

if __name__ == "__main__":

svn = MySVN()

sys.exit(svn.main())

三、cmdln项目打包

通过cmdln库建立的项目可以通过pyinstaller进行打包成独立的exe文件,这样可以直接将exe文件分发给其他人使用,需要先通过pip installer pyinstaller  安装pyinstaller,然后用cmd命令打开项目所在的入口文件目录中,pyinstaller -F example.py 即可将其打包成命名行工具了。

四、其他说明

cmdln相对来说较好使用,能够像ipython那样保持命令行终端会话持续运行,但是关于参数解析及提示的功能还是较弱,不过总体能满足命令行打包后持续运行的需求,若能够将cmd与click库进行结合就更好了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Python命令行输入多行代码并结束的方法是在最后一行输入EOF,即End of File,可以通过组合键ctrl+D来表示。当输入最后一行并回车后按下ctrl+D,input()函数会遇到EOF异常,Python的异常处理机制会捕获到此异常并执行相应的语句,例如使用break来跳出while循环,从而结束多行代码的输入。在Python2中,可以使用raw_input()函数获取整行字符串,然后使用split()函数根据分隔符拆解成子串组成的列表。对于列表中的对象,如果需要进行转换,可以采取相应的转换方法,保留字符串的继续保留即可。此外,Python允许使用反斜杠(\)来实现多行语句,即在一行代码写不下时可以使用反斜杠继续写在下一行。例如,可以将一行代码拆分为多行以增加可读性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python如何输入多行](https://blog.csdn.net/weixin_39897758/article/details/109924115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [python如何多行输入](https://blog.csdn.net/weixin_39828193/article/details/111837929)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [2020-10-24 python命令行多行输入](https://blog.csdn.net/rozen_/article/details/109263962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值