正在导入自定义python模块。。为什么只有一些元素会遗留下来?

2024-04-20 07:45:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个python模块,许多脚本最终需要从该模块导入:

  • 自定义arg解析以设置格式和常量arg(即我的详细arg和帮助arg,以及脚本中所有视觉上令人满意/一致的内容)

我的自定义模块目前正在独立工作,我很满意现在可以继续工作,但我似乎无法将它正确地导入到另一个脚本中。该模块导入另一个模块(版本py)定义一个没有问题的简单变量常量(一个我只想存在于一个位置的版本代码)。但当我尝试将该文件导入另一个文件时(例如。我的可执行.py)如果添加用于解析其他参数的代码,则会失败。另外,我在dir中有uu init\uuuuuuy.py,其中包含了我正在处理的所有文件。你知道吗

这段代码已经改变了很多,我不能让它回到“部分工作”状态,但我可以让它没有错误。以下是不抛出错误的内容:

#!/usr/bin/env python
import argparse
import par as pp  ##par.py is my working parsing code

pp.preq.add_argument('input', metavar=" INPUT.ext", type=argparse.FileType('rt'))
pp.preq.add_argument('output', metavar=" OUTPUT.ext", type=argparse.FileType('wt'))

注意,我希望在执行的文件中定义'description'和'usage',而不是在导入的文件中。下面是导入文件(帕里)有:

class USAGEformat(argparse.RawTextHelpFormatter):
        def add_usage(self, usage, actions, groups, prefix=None):
                if prefix is None:
                        prefix = 'nameconstant '+v.VERSION+'\n\nUSAGE:  '+prog
                super(USAGEformat, self).add_usage(usage, actions, groups, prefix)

parse = argparse.ArgumentParser(add_help=False, formatter_class=USAGEformat)

preq = parse.add_argument_group("___________________\n++ COMPULSORY ARGS")

当我尝试用ArgumentParser添加更多内容时,它无法识别USAGEformat类。在某个时刻,我让我的脚本部分地识别它,并接受我定义的用法,而不是我定义的描述或强制参数。不知道我做了什么。。你知道吗

为什么我的变量只有在导入时才起作用

VERSION = "v1.0"

但当它们更复杂的时候就不行了,为什么我的课程也没有延续下去呢?我假设我对它的工作原理缺乏一些基本的了解,也没有弄清楚它是什么?我一直在用tutorials/Google自学这门语言,因为我不是一个计算机科学家,如果有什么方向的话我会非常感激的。你知道吗


Tags: 模块文件代码py脚本add内容prefix
1条回答
网友
1楼 · 发布于 2024-04-20 07:45:40

您之前的问题和代码:

Fully customized Python Help Usage

使用import par as pp,必须使用pp.前缀访问该模块中定义的所有变量、类和函数。因此pp.parser是导入时创建的解析器对象。pp.preq是参数组之一。你知道吗

pp.USAGEformat是自定义格式化程序类。但是作为格式化程序,在创建parser或导入par时不会创建此类的对象。当您请求helpusage('-h',pp.parser.print_help())时,将从指定的类创建格式化程序。你知道吗

(编辑)这是错误的:

This formatter will take globals variables like version and prog from the current namespace (the importing one), not the pp one.

格式化程序仍然从导入的命名空间获取version。但我可以改变这一点:

pp.version = '3.0'

(参见我在https://stackoverflow.com/a/47118317/901925中的编辑)

通过更改文件末尾的version并执行新的print_help(),可以在pre本身中测试此行为。你会看到显示器有变化。你知道吗

另一方面,pp.parser是在导入时创建的。您可以修改创建时设置的属性pp.parser.description。设置或更改pp.description不起作用。你知道吗

当您执行parser.print_help()操作时,它调用parser.format_help,而后者又调用parser._get_formatter。该方法使用parser.formatter_class创建一个formatter对象,然后该对象被“填充”和“执行”。这种方法有很大的灵活性,但可能会令人困惑。你知道吗

相关问题 更多 >