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中?
答案 0 :(得分:0)
刚测试过它 - 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}
答案 1 :(得分:0)
1 import argparse
2 from argparse import Namespace
3
4 parser = argparse.ArgumentParser()
5 parser.add_argument('--a', default=1)
6 args = parser.parse_args()
7
8 import os
9 if os.path.exists('/tmp/a'):
10 with open('/tmp/a', 'r') as f:
11 ns = f.read()
12 print(ns)
13 args = parser.parse_args(namespace=eval(ns))
14 else:
15 with open('/tmp/a', 'w') as f:
16 f.write(str(args))
17
18 print(args.a)
因为字符串Namespace(a='2')
来自命名空间实例,所以我们可以评估它。