我试图用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)