使Python文件中的HTTP服务器继承与命令行版本相同的参数

使Python文件中的HTTP服务器继承与命令行版本相同的参数,python,python-3.x,http,Python,Python 3.x,Http,我想在一个Python文件中启动一个HTTP服务器,该文件作为命令行工具继承参数 它们是: python3 -m http.server --help usage: server.py [-h] [--cgi] [--bind ADDRESS] [--directory DIRECTORY] [port] positional arguments: port Specify alternate port [default:

我想在一个Python文件中启动一个HTTP服务器,该文件作为命令行工具继承参数

它们是:

python3 -m http.server --help               
usage: server.py [-h] [--cgi] [--bind ADDRESS] [--directory DIRECTORY] 
[port]

positional arguments:
  port                  Specify alternate port [default: 8000]

optional arguments:
  -h, --help            show this help message and exit
  --cgi                 Run as CGI Server
  --bind ADDRESS, -b ADDRESS
                        Specify alternate bind address [default: all
                        interfaces]
--directory DIRECTORY, -d DIRECTORY
                    Specify alternative directory [default:current
                    directory]
我想这会很有用,因为我需要在我自己的程序中使用其中三个参数(绑定、
端口
目录
),所以我可以直接继承它们,而不是重写代码。其中唯一一个我没有用的是
cgi
选项,也许我可以删除它

我还需要消息:
在0.0.0.0端口8000上提供HTTP服务(http://0.0.0.0:8000/)…
将被打印

但除此之外,我还想为处理get、post等定义自己的实现

下面是一个示例,说明我目前正在尝试复制这些参数,并在自己的HTTP服务器中打印消息:

from http.server import ThreadingHTTPServer, HTTPServer, BaseHTTPRequestHandler

class Handler(BaseHTTPRequestHandler):
    # ... custom HTTP GET and POST implementations ...

def start(server_class=ThreadingHTTPServer, handler_class=Handler, bind='0.0.0.0', port=8000):
    server_address = (bind, port)
    httpd = server_class(server_address, handler_class)
    print('Serving HTTP on ' + bind + ' port ' + port + ' (http://' + bind + ':' + port + '/) ...')
    httpd.serve_forever()

if __name__ == "__main__":
    if len(argv) == 2:
        start(port=int(argv[1]))
    else:
        start()

谢谢大家!

http.server的
。除非进行极端的修补(可能通过
argparse
),否则无法继承它。

http.server
参数处理是无效的。除非进行极端的修补(可能通过
argparse
),否则无法继承它。

查看代码,似乎
\uuuu main\uuuu
only块甚至不在处理程序类中,我认为这意味着我必须修补整个文件。此外,它位于
\uuuu main\uuuu
only块中的事实告诉我,这绝对不是要以任何方式继承的。看来我应该多看一眼源代码!不管怎样,我只要从
\uuuu main\uuuu
唯一的块中复制出我想要的东西就行了。再次感谢你!查看代码,似乎
\uuuu main\uuuu
only块甚至不在处理程序类中,我认为这意味着我必须修补整个文件。此外,它位于
\uuuu main\uuuu
only块中的事实告诉我,这绝对不是要以任何方式继承的。看来我应该多看一眼源代码!不管怎样,我只要从
\uuuu main\uuuu
唯一的块中复制出我想要的东西就行了。再次感谢你!