我必须用这个命令行编写一个程序:
demo.py [-h] -f FILENAME [-o]
文件名是强制性的,表示我们要附加到的文件。-o 标志意味着文件将被覆盖。
这个 argparse 代码几乎可以工作:
import argparse
parser = argparse.ArgumentParser(description='A foo that bars')
parser.add_argument("-f",
"--file", dest="filename", required=True,
type=argparse.FileType('a+'),
help="The output file (append mode, see --overwrite).")
parser.add_argument("-o",
"--overwrite", dest="overwrite",
action='store_true',
help="Will overwrite the filename if it exists")
args = parser.parse_args()
if args.overwrite:
args.filename.truncate(0)
print >> args.filename, 'Hello, World!'
但是,如果我将-
(stdout) 指定为文件名,则会收到此错误:
error: argument -f/--file: invalid FileType('a+') value: '-'
我试过a
or r+
,我得到同样的错误。我在 Windows 上使用 Python 2.7,但它也必须在 Linux 上工作。命令行无法更改以获取旧版支持。
如何保持argparse
对 stdout 速记的内置支持,但支持覆盖功能?