首页 > 解决方案 > 如何从命名空间字符串加载 argparse?

问题描述

import argparse
parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
parser.add_argument('--a', default=1)
args = parser.parse_args()

然后我将 args 存储到文件中:

with open('/tmp/a', 'w') as f:
    f.write(str(args))

文件中的内容是这样的:

Namespace(a='2')

那么,如何将此字符串加载到 args 中?

标签: pythonargparse

解决方案


刚刚测试它 -pickle与一个argparse.Namespace对象一起工作:

In [727]: import pickle
In [728]: pickle.dumps(argparse.Namespace(a=10))
Out[728]: b'\x80\x03cargparse\nNamespace\nq\x00)\x81q\x01}q\x02X\x01\x00\x00\x00aq\x03K\nsb.'
In [729]: pickle.loads(_)
Out[729]: Namespace(a=10)

这需要一个导入的argparse.

以及我在评论中建议的字典泡菜:

In [730]: pickle.dumps(vars(_))
Out[730]: b'\x80\x03}q\x00X\x01\x00\x00\x00aq\x01K\ns.'
In [731]: pickle.loads(_)
Out[731]: {'a': 10}

推荐阅读