导入和使用以 argparse 作为参数的函数

Posted

技术标签:

【中文标题】导入和使用以 argparse 作为参数的函数【英文标题】:Importing and using a function that takes argparse as a parameter 【发布时间】:2019-02-18 10:27:37 【问题描述】:

我正在尝试导入一个程序并在其中使用几个函数,但我遇到了与 argparse 相关的问题。

在我想使用的函数中,创建者将他的解析器参数传递给函数。

args = parser.parse_args()

def write_flash(esp, args):

    if args.compress is None and not args.no_compress:
    args.compress = not args.no_stub

    # verify file sizes fit in flash
    flash_end = flash_size_bytes(args.flash_size)
    for address, argfile in args.addr_filename:
        argfile.seek(0,2)  # seek to end
        if address + argfile.tell() > flash_end:

我想知道如何在我正在编写的另一个程序中使用此功能。我是否以某种方式创建了一个与他具有相同参数的 parser.parse_args() 对象?我想到的一件事是使用 subprocess.popen 像这样运行它:

p = subprocess.Popen(['python', 'esptool.py', '--port',
'COM3', 'write_flash', '0x00000', 'boot_v1.7.bin', '0xfc000', 'esp_init_data_    default_v08.bin', '0xfb000',
'blank.bin', '0x01000', 'user1.1024.new.2.bin'])

但这似乎不太理想。我真的很困惑如何处理 argparse,任何帮助都将不胜感激,谢谢。

【问题讨论】:

您可以from fileyouposted import args 并且您将获得解析的任何参数。另请注意,原始 cli 参数始终在 sys.argv 中可用。 args 可以是任何具有args.compress 等属性的对象。 argparse.Namespace 是一种创建此类对象的便捷方式,但它几乎可以是任何类实例。 【参考方案1】:

parse_args() 返回一个Namespace 对象。您可以自己创建一个。

from argparse import Namespace`
args = Namespace()
args.compress = True
args.no_stub = 3
print(args)

然后通过它。

【讨论】:

Namespace(compress=True, no_stub=3)

以上是关于导入和使用以 argparse 作为参数的函数的主要内容,如果未能解决你的问题,请参考以下文章

python之定义参数模块argparse的基本使用

作为 argparse 参数的目录路径

命令行参数随后argparse选项

使用 argparse 和 python 接受字典作为参数 [重复]

如何使用 argparse 将列表作为命令行参数传递?

调用以 std::list 作为参数的 C++ 函数