文件格式記錄很清楚:
參數從文件中讀取默認情況下必須每行一個[...]
和代碼示例中的文檔顯示他們寫用換行文件之間:
>>> with open('args.txt', 'w') as fp:
... fp.write('-f\nbar')
如果你想保存當前的命令行,只寫sys.argv[1:]
到一個文件中,用換行參數之間:
with open('commandline_args.txt', 'w') as f:
f.write('\n'.join(sys.argv[1:]))
演示:
>>> from argparse import ArgumentParser
>>> import sys
>>> parser = ArgumentParser(fromfile_prefix_chars='@')
>>> parser.add_argument('--foo')
_StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('bar', nargs='?')
_StoreAction(option_strings=[], dest='bar', nargs='?', const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> sys.argv[1:] = ['--foo', 'spam', 'barbaz']
>>> parser.parse_args()
Namespace(bar='barbaz', foo='spam')
>>> with open('commandline_args.txt', 'w') as f:
... f.write('\n'.join(sys.argv[1:]))
...
17
>>> parser.parse_args(['@commandline_args.txt'])
Namespace(bar='barbaz', foo='spam')
>>> sys.argv[1:] = ['--foo=spam', 'barbaz'] # using alternate syntax
>>> parser.parse_args()
Namespace(bar='barbaz', foo='spam')
>>> with open('commandline_args.txt', 'w') as f:
... f.write('\n'.join(sys.argv[1:]))
...
17
>>> parser.parse_args(['@commandline_args.txt'])
Namespace(bar='barbaz', foo='spam')
我不認爲它就是這麼簡單。請參閱http://stackoverflow.com/a/25084994/169296。您的解決方案將標誌和標誌的值分成兩行。 –
@BrettStottlemyer:是的,那很好。請注意,文檔中的代碼示例完全符合**。 –
@BrettStottlemyer:注意它們也是'sys.argv'中的單獨的參數條目。你可以在'sys.argv'列表中選擇''--option = foo''(一個字符串或'' - 選項'和''foo'' –