{"id":3755,"date":"2020-09-26T22:32:12","date_gmt":"2020-09-26T13:32:12","guid":{"rendered":"https:\/\/okamurax.com\/?p=3755"},"modified":"2020-09-29T03:09:40","modified_gmt":"2020-09-28T18:09:40","slug":"python-%e7%b5%84%e3%81%bf%e8%be%bc%e3%81%bf%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc","status":"publish","type":"post","link":"https:\/\/appbay.org\/?p=3755","title":{"rendered":"Python \u7d44\u307f\u8fbc\u307f\u30b5\u30fc\u30d0\u30fc"},"content":{"rendered":"<pre class=\"lang:python decode:true \">import http.server\r\nimport socketserver\r\n\r\n# \u30ef\u30f3\u30e9\u30a4\u30ca\u30fc\u306e\u5834\u5408\r\n# python \u2013m http.server 8000\r\n# \u3042\u308b\u3044\u306f\u3001\r\n# python \u2013m http.server 8000 --cgi\r\n\r\n# \u3053\u306e\u5834\u5408\u3001\u5185\u90e8\u7684\u306b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u51e6\u7406\u3055\u308c\u308b\r\n# https:\/\/github.com\/python\/cpython\/blob\/3.6\/Lib\/http\/server.py\r\n\r\n'''\r\ndef test(HandlerClass=BaseHTTPRequestHandler,\r\n         ServerClass=HTTPServer, protocol=\"HTTP\/1.0\", port=8000, bind=\"\"):\r\n    \"\"\"Test the HTTP request handler class.\r\n    This runs an HTTP server on port 8000 (or the port argument).\r\n    \"\"\"\r\n    server_address = (bind, port)\r\n\r\n    HandlerClass.protocol_version = protocol\r\n    with ServerClass(server_address, HandlerClass) as httpd:\r\n        sa = httpd.socket.getsockname()\r\n        serve_message = \"Serving HTTP on {host} port {port} (http:\/\/{host}:{port}\/) ...\"\r\n        print(serve_message.format(host=sa[0], port=sa[1]))\r\n        try:\r\n            httpd.serve_forever()\r\n        except KeyboardInterrupt:\r\n            print(\"\\nKeyboard interrupt received, exiting.\")\r\n            sys.exit(0)\r\n\r\nif __name__ == '__main__':\r\n    parser = argparse.ArgumentParser()\r\n    parser.add_argument('--cgi', action='store_true',\r\n                       help='Run as CGI Server')\r\n    parser.add_argument('--bind', '-b', default='', metavar='ADDRESS',\r\n                        help='Specify alternate bind address '\r\n                             '[default: all interfaces]')\r\n    parser.add_argument('port', action='store',\r\n                        default=8000, type=int,\r\n                        nargs='?',\r\n                        help='Specify alternate port [default: 8000]')\r\n    args = parser.parse_args()\r\n    if args.cgi:\r\n        handler_class = CGIHTTPRequestHandler\r\n    else:\r\n        handler_class = SimpleHTTPRequestHandler\r\n    test(HandlerClass=handler_class, port=args.port, bind=args.bind)\r\n'''\r\n\r\n# \u30b9\u30af\u30ea\u30d7\u30c8\u5185\u3067\u30b5\u30fc\u30d0\u30fc\u3092\u547c\u3076\u5834\u5408 --------------------------------------------------------\r\n\r\n# \u4e0a\u8a18\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u898b\u308b\u3068\u3001\u3053\u306e\u3088\u3046\u306b\u66f8\u3051\u308b\r\nhttp.server.test(HandlerClass=http.server.SimpleHTTPRequestHandler)\r\n# --cgi\u306e\u5834\u5408\r\nhttp.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)\r\n\r\n# \u307e\u305f\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3082\u66f8\u3051\u308b\r\naddr = (\"127.0.0.1\", 8000)\r\nclass handler(http.server.CGIHTTPRequestHandler):\r\n   cgi_directories = [\"\/cgi-bin\"]\r\n# handler\u90e8\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3082\u66f8\u3051\u308b\r\n# handler = http.server.CGIHTTPRequestHandler\r\n# handler.cgi_directories = [\"\/cgi-bin\"]\r\nhttpd = http.server.HTTPServer(addr, handler)\r\nhttpd.serve_forever()\r\n\r\n# \u3053\u3053\u3067\u306fhttp.server.HTTPServer\u3092\u5229\u7528\u3057\u3066\u3044\u308b\r\n# http.server.HTTPServer\u306fsocketserver.TCPServer\u306e\u30b5\u30d6\u30af\u30e9\u30b9\u3067\u3042\u308a\r\n# \u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3082\u66f8\u3051\u308b\r\n\r\naddr = (\"127.0.0.1\", 8000)\r\nclass handler(http.server.CGIHTTPRequestHandler):\r\n   cgi_directories = [\"\/cgi-bin\"]\r\nhttpd = socketserver.TCPServer(addr, handler)\r\nhttpd.serve_forever()\r\n\r\n# serve_forever()\u306fBaseServer\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u304a\u308a\u3001TCPServer\u306fBaseServer\u3092\u7d99\u627f\u3057\u3066\u3044\u308b\r\n# \u81ea\u524d\u306e\u30cf\u30f3\u30c9\u30e9\u30fc\u306f# http.server.BaseHTTPRequestHandler\u3092\u7d99\u627f\u3057\u3066do_xxx\u3068\u3044\u3046\u540d\u524d\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u5b9f\u88c5\u3059\u308b\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u30fb\u7d44\u307f\u8fbc\u307f\u30b5\u30fc\u30d0\u30fc\u3067CGI\u3092\u51e6\u7406<\/p>\n<p>Win10\u8a2d\u5b9a\uff1e\u30a2\u30d7\u30ea\uff1e\u30a2\u30d7\u30ea\u3068\u5b9f\u884c\u30a8\u30a4\u30ea\u30a2\u30b9<br \/>\npython.exe\u3092\u30aa\u30d5\u306b\u3059\u308b<\/p>\n<p>sysdm.cpl\uff1e\u8a73\u7d30\u8a2d\u5b9a\uff1e\u74b0\u5883\u5909\u6570<br \/>\n\u304b\u3089\u30d1\u30b9\u3092\u901a\u3059<br \/>\nC:\\Users\\mail\\AppData\\Local\\Programs\\Python<\/p>\n<p>\u30d0\u30c3\u30c1\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210<\/p>\n<pre class=\"lang:default decode:true\">start python.py\r\nstart http:\/\/localhost:8000\/index.html\r\nexit<\/pre>\n<p>\u30d0\u30c3\u30c1\u3068\u540c\u3058\u968e\u5c64\u306bpython.py\u3092\u4f5c\u6210<\/p>\n<pre class=\"lang:python decode:true\">import http.server\r\nclass handler(http.server.CGIHTTPRequestHandler):\r\n   cgi_directories = [\"\/bin\"]\r\nhttp.server.test(HandlerClass=handler)<\/pre>\n<p>\u30d0\u30c3\u30c1\u3068\u540c\u3058\u968e\u5c64\u306bindex.html\u3092\u4f5c\u6210<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;!DOCTYPE html&gt;\r\n&lt;html lang=\"ja\"&gt;\r\n&lt;head&gt;\r\n  &lt;meta charset=\"UTF-8\"&gt;\r\n  &lt;title&gt;test&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n\r\n&lt;form action=\"\/bin\/test.py?age=20\" method=\"POST\"&gt;\r\n  &lt;input type=\"text\" name=\"val\"&gt;\r\n  &lt;input type=\"submit\" name=\"submit\" value=\"\u9001\u4fe1\"&gt;\r\n&lt;\/form&gt;\r\n\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>bin\u30d5\u30a1\u30eb\u30c0\u4ee5\u4e0b\u306btest.py\u3092\u4f5c\u6210<\/p>\n<pre class=\"lang:python decode:true \">import cgi\r\nimport urllib\r\nimport sys\r\nimport io\r\n\r\nsys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')\r\n\r\nform = cgi.FieldStorage()\r\nv = form.list # name, value\u3092list\u578b\r\n# \u4ed6\u306b\u3082\u3044\u304f\u3064\u304b\u65b9\u6cd5\u304c\u3042\u308b\r\n# form.getvalue(\"val\") # value\u3092string\u578b\/\u8907\u6570\u306a\u3089list\u578b\r\n# form.getfirst(\"val\") # value\u3092string\u578b\r\n# form.getlist(\"val\") # value\u3092list\u578b\r\n# form[\"val\"] # name, value\u3092list\u578b\r\n# form[\"val\"].value # value\u3092string\u578b\r\n\r\nhtml = '''\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=\"UTF-8\"&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;p&gt;{}&lt;\/p&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n'''.format(v)\r\n\r\nprint(\"Content-Type: text\/html; charset=UTF-8\")\r\nprint(\"\")\r\nprint(html)<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>import http.server import socketserver # \u30ef\u30f3\u30e9\u30a4\u30ca\u30fc\u306e\u5834\u5408 # python \u2013m http.server 8000 # \u3042\u308b\u3044\u306f\u3001 # python \u2013m http.serve &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/appbay.org\/?p=3755\" class=\"more-link\"><span class=\"screen-reader-text\">&#8220;Python \u7d44\u307f\u8fbc\u307f\u30b5\u30fc\u30d0\u30fc&#8221; \u306e<\/span>\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[154],"class_list":["post-3755","post","type-post","status-publish","format-standard","hentry","category-1","tag-python"],"_links":{"self":[{"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts\/3755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3755"}],"version-history":[{"count":4,"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts\/3755\/revisions"}],"predecessor-version":[{"id":3759,"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts\/3755\/revisions\/3759"}],"wp:attachment":[{"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}