RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1069537
Accepted
Keymaster
Keymaster
Asked:2020-01-14 04:40:52 +0000 UTC2020-01-14 04:40:52 +0000 UTC 2020-01-14 04:40:52 +0000 UTC

如何正确写入函数的工作文件?

  • 772

业余时间,为了学习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())

如果函数参数是/?,我想让它像显示帮助一样简单。或者是否有必要以某种方式重写函数,以便它们不打印结果,而是返回字符串列表,然后根据命令将其打印到控制台或写入文件?我要求钢琴家不要开枪,他尽可能地弹奏。我一点经验都没有,写这个没用的东西就是为了得到它。

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Keymaster
    2020-01-16T01:06:33Z2020-01-16T01:06:33Z
    import utils
    import os
    import re
    from contextlib import redirect_stdout
    
    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 and (len(argument) and argument[0] == '>'):
            with open(argument[1:], 'w') as file: #Перенаправляем вывод в файл если 
                with redirect_stdout(file):       #Аргумент начинается с '>'
                    functions[function_name]('') 
    
    
    
        elif function_name in functions:
            functions[function_name]((argument).strip())
            print('\n')
        elif function_name != ' ' or not function_name.isalpha(): 
            print(function_name + argument, """ не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.""")
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5