运行SimpleHTTPServer时如何设置当前目录

51

是否有一种方法可以设置SimpleHTTPServer或BaseHTTPServer要启动的目录?

4个回答

71

如果你直接从命令行使用 SimpleHTTPServer,你可以简单地使用shell功能:

pushd /path/you/want/to/serve; python -m SimpleHTTPServer; popd

在Python 3中,你需要使用:

pushd /path/you/want/to/serve; python -m http.server; popd

SimpleHTTPServer模块已经在Python 3.0中合并到http.server中。


5
不,我是在一个应用程序内部使用它。 - Eldelshell
1
@Ubersoldat:那么答案是一样的:使用shell来设置当前工作目录。或者使用os.setcwd()——这是同样的事情。 - S.Lott
16
os.setcwd不存在,但是os.chdir(path)可以完成同样的工作。感谢两位。 - Eldelshell
1
@Ubersoldat:抱歉——我是凭记忆写的。但愿我能编辑这条评论。 - S.Lott
6
popd 指令从未被执行,因为 SimpleHTTPServer 没有返回。 - Luxalpa
显示剩余2条评论

3
如果您需要从代码中运行而不是命令行中运行,SimpleHTTPRequestHandler 接收一个 directory 参数,默认值为当前目录:
def __init__(self, *args, directory=None, **kwargs):
    if directory is None:
        directory = os.getcwd()

您可以像这样使用它:
import http.server

class Handler(http.server.SimpleHTTPRequestHandler):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs, directory='/path/to/your/dir')

def main():
    http.server.test(Handler)  # test(Handler, port=8080)

if __name__ == '__main__':
    main()

如果您不想提供任何索引,您可以在Linux/Mac上将directory参数设置为/dev/null - undefined

1
你可以创建一个脚本来实现这个(比如说microserver.sh),并将其放在里面。
#!/bin/bash

pushd /your/directory/
python -m SimpleHTTPServer 8000 &> /dev/null &
popd

然后,更改权限:

chmod +x microserver.sh

并执行它:

./microserver.sh

这将避免将消息打印到控制台并将进程发送到后台,因此您可以继续使用控制台进行其他操作。
此外,它可以从其他脚本中调用,例如可以将其添加到〜/ .bashrc中,在启动用户会话时启动服务器。只需在.bashrc的末尾添加此内容即可。
. ./microserver.sh


1

在Linux上不更改目录进行操作:

注意:保留HTML标记。

bash -c "cd /your/path; python -m SimpleHTTPServer"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接