我需要创建一个python模块,许多脚本最终需要从该模块导入:
我的自定义模块目前正在独立工作,我很满意现在可以继续工作,但我似乎无法将它正确地导入到另一个脚本中。该模块导入另一个模块(版本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自学这门语言,因为我不是一个计算机科学家,如果有什么方向的话我会非常感激的。你知道吗
您之前的问题和代码:
Fully customized Python Help Usage
使用
import par as pp
,必须使用pp.
前缀访问该模块中定义的所有变量、类和函数。因此pp.parser
是导入时创建的解析器对象。pp.preq
是参数组之一。你知道吗pp.USAGEformat
是自定义格式化程序类。但是作为格式化程序,在创建parser
或导入par
时不会创建此类的对象。当您请求help
或usage
('-h',pp.parser.print_help()
)时,将从指定的类创建格式化程序。你知道吗(编辑)这是错误的:
格式化程序仍然从导入的命名空间获取
version
。但我可以改变这一点:(参见我在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
对象,然后该对象被“填充”和“执行”。这种方法有很大的灵活性,但可能会令人困惑。你知道吗相关问题 更多 >
编程相关推荐