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

时间:2018-04-04 00:13:02

标签: python python-2.7 simplehttpserver

我正在尝试使用SimpleHTTPServer在后​​台启动commands.getoutput,但无法执行此操作。

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

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

1 个答案:

答案 0 :(得分: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)