如何在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
)..
答案 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)