业余时间,为了学习python,我用python写了一个DOS命令行模拟器。问题是如何正确实现 DOS 命令实用程序>文件的模拟。将工作结果保存到文件中。示例dir>1.txt变体os.system('dir>1.txt')当然很简单。但我不是为了让事情变得容易而变态。我希望 python 写入文件。到目前为止,所有这些都由一个主脚本组成,该脚本包含一个用于输入命令的永恒循环,以及一个模块,该模块具有主要根据输入的命令拉取的功能。这是主要的:
import utils
import os
import re
functions = {'tree': utils.tree, #словарь релизованных функций
'quit': utils.quit, 'exit': utils.quit, 'x': utils.quit,
'dir': utils.dir, 'ls': utils.dir,
'cd': utils.cd, 'chdir':utils.cd,
'help': utils.help, '?': utils.help,
'cls':utils.cls
}
while True:
input_string = input(os.getcwd() + '>').lower() # читаем ввод
cli = re.split(r'([a-z]+)(.*)', input_string) # режем на функцию и аргумент
cli.extend(' '' ')
function_name = cli[1]
argument = cli[2]
if function_name in functions and argument == '/?': # если /? печатаем докум.
print(functions[function_name].__doc__)
elif function_name in functions:
functions[function_name]((argument).strip()) # если функция в словаре - вызываем
print('\n')
elif function_name != ' ' or not function_name.isalpha():
print(function_name + argument, """ не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.""")
这是 utils.py 中的示例函数
from pathlib import Path
import sys
import os
import datetime
import re
def cd(argument):
r"""Вывод имени либо смена текущего каталога.
Здесь вырезано куча текста из справки
"""
if len(argument) > 0:
command = re.split(r'[ ]', argument, maxsplit=1)
if len(command) > 1 and command[0] == '/d':
path = command[1]
else:
path = argument
if not os.path.isdir(path):
print('Системе не удается найти указанный путь.')
else:
accert: os.path.isdir(path)
os.chdir(path)
elif argument == '':
print(os.getcwd())
如果函数参数是/?,我想让它像显示帮助一样简单。或者是否有必要以某种方式重写函数,以便它们不打印结果,而是返回字符串列表,然后根据命令将其打印到控制台或写入文件?我要求钢琴家不要开枪,他尽可能地弹奏。我一点经验都没有,写这个没用的东西就是为了得到它。

