【问题标题】:How to start SimpleHTTPServer in background with commands.getoutput如何使用 commands.getoutput 在后台启动 SimpleHTTPServer
【发布时间】:2018-04-04 00:13:01
【问题描述】:

我正在尝试使用commands.getoutput 在后台启动SimpleHTTPServer,但无法这样做。

commands.getoutput("python -m SimpleHTTPServer 8080 &> /dev/null &")

(Pdb++) n
sh: -c: line 0: syntax error near unexpected token `;'
sh: -c: line 0: `{ python -m SimpleHTTPServer 8080 &> /dev/null &; } 2>&1'

当我在 linux 提示符下执行相同的操作时,它工作正常:

bash-4.2$ python -m SimpleHTTPServer 8080 &> /dev/null &
[2] 28460

bash-4.2$ ps -ef | grep SimpleHTTPServer
x  27624 22693  0 16:54 pts/16   00:00:00 python -m SimpleHTTPServer 8080

有人可以帮我弄清楚我是否在这里遗漏了什么吗?

【问题讨论】:

    标签: python python-2.7 simplehttpserver


    【解决方案1】:

    既然你已经标记了 Python 2.7,你为什么还在使用commands 接口?自 Python 2.6 起已弃用,应改用 subprocess 模块:

    import subprocess
    
    subprocess.Popen(["python", "-m", "SimpleHTTPServer", "8080"])
    

    应该这样做。或者,更好的是,使用 nohup 运行它,因为您的脚本退出可能会杀死它:

    subprocess.Popen(["nohup", "python", "-m", "SimpleHTTPServer", "8080"])
    

    要忽略输出,如果您使用 Python 3.3+,可以将 stdout=subprocess.DEVNULL 传递给 subprocess.Popen() 调用,或者您可以自己打开 /dev/null

    import os
    import subprocess
    
    with open(os.devnull, 'w') as t:
        subprocess.Popen(["nohup","python","-m","SimpleHTTPServer","8080"], stdout=t, stderr=t)
    

    【讨论】:

    • 我想在后台启动 SimpleHTTPServer。
    • @npatel - 以上在后台运行。
    • 我收到了这个异常:TypeError: execv() arg 2 must contain only strings,看起来8080 将被更改为"8080"
    • @npatel - 我忘了在最初的答案中引用端口号,在我有机会更新它之前,你似乎更快地拿起了初始代码。检查最新的答案版本。
    • 谢谢@zwer。将使用子进程而不是命令。感谢您指出这一点。
    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 2020-10-10
    • 2019-06-09
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多