如何使用 commands.getoutput 在后台启动 SimpleHTTPServer

How to start SimpleHTTPServer in background with commands.getoutput

我正在尝试使用 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 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)