我想将命令及其输出存储在 log.txt 中。因此,我将客户 Logger 类对象分配给 sys.stdout,并覆盖写入方法以将输出存储在文件中以及在控制台中打印。这里的问题是,当 sys.stdout 被覆盖时,ABC 类 (hi,hello,shutdown) 中命令的“tab”自动完成不起作用,向上和向下箭头也不适用于向前和向后的历史命令。
import cmd
import sys
import readline
LOG_FILE=open("log.txt",'w+')
class Logger():
def __init__(self):
self.console=sys.stdout
def write(self,message):
self.console.write(message)
LOG_FILE.write(message)
def flush(self):
self.console.flush()
class ABC(cmd.Cmd):
def __init__(self):
sys.stdout = Logger()
readline.set_completer(self.complete)
readline.parse_and_bind("tab: complete")
def do_hello(self,args):
print("hello entered")
def do_hi(self,args):
print("Hi entered")
def do_shutdown(self,args):
print("shutting down")
global LOG_FILE
LOG_FILE.close()
#sys.exit()
def emptyline(self):
pass
def precmd(self,args):
LOG_FILE.write(args+"\n")
if __name__ == '__main__':
ABC().cmdloop()
我希望当在上面的命令中输入“hel”然后按下 Tab 键时,它应该在下一行显示“hello help”。按 tab 键不应向正在键入的命令添加 4 个空格。 请帮助工作解决方案,其中使用制表符、向上/向下箭头自动完成命令,命令及其输出应存储在文件“log.txt”中。 请注意,我在红色运行这个程序有 linux 7 操作系统,而不是 windows。