Python SimpleHTTPServer更改服务目录

Python SimpleHTTPServer更改服务目录,python,python-2.7,simplehttpserver,Python,Python 2.7,Simplehttpserver,我编写了以下代码来启动HTTP服务器,将来可以选择启动TCP/IP服务器: import SimpleHTTPServer import SocketServer import time import socket def choose(): if raw_input("Would you like to start an HTTP or TCP/IP Server?: ") == "HTTP": print "You have selected HTTP server." i

我编写了以下代码来启动HTTP服务器,将来可以选择启动TCP/IP服务器:

import SimpleHTTPServer
import SocketServer
import time
import socket

def choose():
if raw_input("Would you like to start an HTTP or TCP/IP Server?: ") == "HTTP":
    print "You have selected HTTP server."
    if raw_input("Is this correct? Use Y/N to answer. ") == "Y":
        print ""
        start_HTTP()
    else:
        choose()
else:
    print "Goodbye! "

def start_HTTP():
    PORT = int(raw_input("Which port do you want to send out of? "))
    Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
    httpd = SocketServer.TCPServer(("", PORT), Handler)
    print "Please wait one moment..."
    time.sleep(2)
    run_HTTP(PORT, httpd)

def run_HTTP(PORT, httpd):
    print "Use the following IP address to connect to this server (LAN only): " + [(s.connect(('8.8.8.8', 80)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1] #prints local IP address
    print "Now serving from port: ", PORT
    print "To shutdown the server, use the PiServer_Off software."
    time.sleep(2)
    print ""
    print "Any traffic through the server will be recorded and displayed below: "
    httpd.serve_forever()

choose()
我想更改目录,以便在将来,除了主机之外,没有人可以终止服务器(因为PiServer Off软件将安装在同一目录中)

我找到了这个解决方案,但它看起来是一个shell,我不知道如何为我的代码修改它(使用Pycharm):

我也发现了这一点,但它似乎没有回答我的问题:

我想知道是否有人可以共享和解释他们在不移动服务器文件的情况下更改目录的方法,因为我想用它来构建一个家庭文件共享系统


谢谢

使用
os.chdir
更改当前目录,然后按照通常的方式启动服务器。

这个问题基本上与这个问题重复。
然而,那边提出的解决方案似乎更合适。
(它不太“黑客化”/依赖于副作用,而是使用类构造函数。)

是这样的:

导入http.server
导入socketserver
端口=8000
DIRECTORY=“web”
类处理程序(http.server.SimpleHTTPRequestHandler):
定义初始化(self,*args,**kwargs):
super()
将socketserver.TCPServer((“”,PORT),Handler)作为httpd:
打印(“在端口服务”,端口)
httpd.永远为你服务()
上面的代码适用于Python>=3.6
对于3.5之前的Python,TCPServer的基类没有可用的contextmanager协议,但这只意味着您需要使用语句更改
,并将其转换为普通赋值:

httpd = socketserver.TCPServer(("", PORT), Handler)

这要归功于。

使用
os.chdir
然后像平常一样遵循。@MalikBrahimi谢谢!目录选项似乎不在文档上。它显示向前。
httpd = socketserver.TCPServer(("", PORT), Handler)