我在同一个包中有两个模块,module1.py
和{
在module1.py
中,我有一个函数用argparse
读取命令行参数:
import argparse
def parse_arguments_module1():
parser = argparse.ArgumentParser()
optional = parser._action_groups.pop()
required = parser.add_argument_group('required arguments')
required.add_argument('--argA', help='argA', required=True)
required.add_argument('--argB', help='argB', required=True)
optional.add_argument('--argC', help='argC')
optional.add_argument('--argD', help='argD')
parser._action_groups.append(optional)
args = parser.parse_args()
return args
现在假设在module2.py
中,我从module1.py
导入parse_arguments_module1()
并使用它(这是可行的):
使用:
python3 module2.py --argA A --argB B --argC C
输出:
Namespace(argA='A', argB='B', argC='C', argD=None)
问题是:如何读取module2.py
(required
和/或{main
中的args
包含更多参数,仅用于module2.py
)
您需要使用partial parsing和^{} 来实现您想要的结果,和/或显式地将参数作为列表传递。在
通常,不带参数的
parser.parse_args()
会将sys.argv[1:]
中的所有值(因此除了第一个元素)作为要解析的输入。如果列表中有无法解析的元素,则会打印一条错误消息并调用sys.exit(1)
;您的脚本将退出。在因此,如果您想让
sys.argv
上的一些参数转到一个解析器,而其余的参数转到另一个解析器,那么您需要使用parser.parse_known_args()
并将剩余的参数传递给另一个解析器。在我将创建和配置
ArgumentParser()
实例从解析中分离出来;因此在module1
中,请执行以下操作:在
^{pr2}$module2
中,使用相同的结构,但要重用module1
中的解析器:相关问题 更多 >
编程相关推荐