如何使用django调用python脚本并实时返回结果?

时间:2015-12-08 13:41:19

标签: python django

我正在编写一个关于使用django管理网络设备的项目。需要运行带有按钮的python脚本并将结果实时返回到html。 例如:

views.py:

#The script which I want to run
def script():
    print 'wait a minute, programme is running'
    time.sleep(10)
    print 'Now, in progress 1'
    time.sleep(10)
    print 'Now, in progress 2'

#The view which call the script
def test(request):
    if request.method == 'POST':
       script()

我想实时将消息放入html中。如何实现它?

1 个答案:

答案 0 :(得分:0)

如果脚本位于单独的python文件中(例如名为DB::table('articles')->where('id', 'some id')->increment('views'); ),则可以

只需导入这样的模块并调用该函数,如果它返回一个字符串作为其输出

script.py

否则,如果你需要保留打印输出,启动一个单独的python进程来运行它并捕获它的输出

import script
def test(request):
    if request.method == 'POST':
       output = script.script()
       return HttpResponse(output, content_type="text/plain")

查看PMOTW上的this subprocess tutorial

注1:在Python 3上,您可能希望将输出转换为字符串(它由字节组成)

import subprocess

def test(request):
    if request.method == 'POST':
       output = subprocess.check_output(['python', 'script.py'])
       return HttpResponse(output, content_type="text/plain")

注意2:假设启动的过程不会花费太长时间,否则HTTP请求将过期并且连接将关闭。