使用 argparse,在命令行上为带有 type=Path 的参数编写什么



我是新手,我想简单地确定在命令行上写什么来运行python程序(myprogram.py),该程序末尾包含以下代码:

from http.server import test, SimpleHTTPRequestHandler
from argparse import ArgumentParser
from os import getcwd, chdir
from os.path import exists, relpath, join
from logging import getLogger
from pathlib import Path
info = getLogger(__name__).info
# (some lines not shown)
if __name__ == '__main__':
        parser = ArgumentParser()
        parser.add_argument('--bind', '-b', default='', metavar='ADDRESS',
                            help='Specify alternate bind address '
                                 '[default: all interfaces]')
        parser.add_argument('--port', '-p', default=8000, metavar='PORT',
                            type=int, help='Specify alternate port [default: 8000]')
        parser.add_argument('dir', action='store',
                            default='.', type=Path, nargs='?',
                            help='Specify directory to serve [default: $PWD]')
        args = parser.parse_args()
        info('chdir({args.dir})'.format(args=args))
        chdir(args.dir)
        test(HandlerClass=NoCacheHandler, port=args.port, bind=args.bind)

该程序应该(除其他外)将工作目录更改为名为"static"的文件夹,该文件夹与 myprogram.py 位于同一位置。 我尝试了很多事情(包括指定完整路径,带引号和不带引号,带嵌套引号等),例如:

$ python myprogram.py dir static

我得到:

usage: myprogram.py [-h] [--bind ADDRESS] [--port PORT] [dir]
myprogram.py: error: unrecognized arguments: static

我阅读了几个文档(例如这个)和示例等,但被卡住了。 谢谢!

我可以看到两个问题;

  1. dir 是第一个未标记的参数将进入的变量的名称。您不会在命令行上指定它,它的位置是使它进入这里的原因。因此,请尝试运行python myprogram.py static
  2. 我不太确定Path是什么,但我认为你只是想删除这个论点。如果未指定type,它将默认为 string 能够保存路径。

最新更新