Python Web Server桌面和笔记本电脑中的不同文件夹

ktca8awb  于 2023-09-29  发布在  Python
关注(0)|答案(2)|浏览(100)

我正在做一个简单的web服务器。这个想法是使服务器不安装任何额外的模块。
问题是工作完美的台式电脑,但在笔记本电脑中,它共享system32文件夹,而不是文件所在的文件夹。我试过几台台式机和笔记本电脑,总是发生同样的事情。操作系统:Windows 10
我不明白为什么结果会根据计算机的类型而改变(以及程序是如何知道的)。有什么想法吗?
我附上代码:

import http.server
import socketserver
import socket 

port= 8000

handler = http.server.SimpleHTTPRequestHandler

address_ip = socket.gethostbyname(socket.gethostname())

with socketserver.TCPServer(("", port), handler) as server:
    print(f" Server address IP: | {address_ip}:{port} |")
    print(f"       (Press Ctrl+C to close)\n")
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        print("\nServer stoped by user.")
input("\nPress Enter to exit...")
xsuvu9jc

xsuvu9jc1#

因此,问题是,无论您从何处启动,您的笔记本电脑Python安装都会将其工作目录设置为c:\Windows\system32。这也可能与你开始你的剧本的方式有关,但我不会更深入。解决问题的一种方法是将服务器提供文件的目录设置为脚本所在的目录。你可以通过将handler对象改为下面这行来实现:

import partial from functools
handler = partial(http.server.SimpleHTTPRequestHandler, directory=os.path.dirname(os.path.realpath(__file__)))

请注意,这意味着如果您从其他位置启动脚本,它将再次回退到脚本位置,这是用户可能不会期望的。

twh00eeo

twh00eeo2#

最后我得到了一个解决方案,感谢@Marko的提示。
由于某些原因,在某些计算机中,python工作目录使用脚本所在的目录,而其他目录则更改为System32。(可能是关于用户权限的,尽管我总是以管理员的身份执行。)
为了更正,我必须将工作目录更改为脚本所在的目录。

os.chdir(os.path.dirname(os.path.abspath(sys.argv[0])))

使用此命令,它检测脚本的文件夹,并通过os.chdir将目录更改为脚本的目录。

相关问题