在docopt中的程序名称中包含空格

时间:2014-11-10 17:52:49

标签: python docopt

如何在git status中包含带空格的程序名称(如docopt)?我有一个Perl脚本调度Python脚本的设置。可以通过多种方式调用Perl脚本,为简单起见,我们说prog sub1 sub2。所以Perl脚本名为prog。它现在使用sub2调度名为sub2 --progName="prog sub1 sub2" [options]的Python脚本。 (因此真正的程序名称不是sub2而是prog sub1 sub2)。我试图使用docopt来实现此方案,例如:

"""Usage: %progName% [-h]

Options:
  -h --help
"""

from docopt import docopt
import sys

if __name__ == '__main__':
    progName=sys.argv[0]
    for i, arg in enumerate(sys.argv):
        if arg.startswith('--progName='):
            ind=arg.index("=")+1
            progName=arg[ind:]
            del sys.argv[i]
            break
    doc=__doc__.replace('%progName%',progName)
    args = docopt(doc)
    print(args)

但是,这不适用于命令名称中的空格(prog sub1 sub2)..

1 个答案:

答案 0 :(得分:0)

这可以使用help=False选项与DocoptExit例外相结合来完成:

"""Usage: %progName% [-h]

Options:
  -h --help
"""

from docopt import docopt, DocoptExit
import sys

if __name__ == '__main__':
    progName=sys.argv[0]
    for i, arg in enumerate(sys.argv):
        if arg.startswith('--progName='):
            ind=arg.index("=")+1
            progName=arg[ind:]
            del sys.argv[i]
            break

    usage=False
    try:
        args = docopt(__doc__, help=False)
        if args['--help']:
            usage=True
    except DocoptExit as e:
        usage=True
        print ("Bad arguments!")
    if usage:
        print(__doc__.replace('%progName%',progName))
        raise SystemExit
    print(args)