根据 bash 参考,我们可以通过以 & 字符结尾来给出非阻塞命令。但是,当我尝试以下命令时它不起作用:
python -m SimpleHTTPServer 8080&
我打算这样做的原因是我想启动内置的 python web 服务器作为另一个更大的程序的一部分,该程序也是用 python 编写的。如何在非阻塞/守护进程模式下发出此命令?我什至尝试在 python 中使用“subprocess.Popen()”执行此命令,这也应该创建一个非阻塞进程,但即使这样也不起作用。
编辑:这是我启动网络服务器的Python代码部分(添加“nohup”似乎可以解决问题):
pid_webserver = execute("nohup python -m SimpleHTTPServer 8080 &",wait=False,shellexec= True)
#pid_webserver = execute("python -m SimpleHTTPServer 8080 &",wait=False,shellexec= True)
def execute(command,errorstring='', wait = True, shellexec = True):
try:
print 'command=' + command
p=subprocess.Popen("gksu '" + command + "'", shell=shellexec,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
if wait:
p.wait()
result=get_stdout(p)
return result
else:
print 'not waiting'
return p
except subprocess.CalledProcessError as e:
print 'error occured:' + errorstring
return errorstring
答案1
作品&
。但我认为你正在寻找的是nohup python -m SimpleHTTPServer &
。
但我认为你也应该看看http://docs.python.org/2/library/simplehttpserver.html。
答案2
'&' 在这里不起作用...它是一个 bash 操作符,在你的脚本中你没有使用 bash 来执行命令,你是从 python 脚本执行它 - 这就是为什么它永远不会工作。
尝试 :
import os
os.system("python -m SimpleHTTPServer 8080 &")