jquery 如何使用flask在文本区打印外部程序的stdout

pw9qyyiw  于 2023-08-04  发布在  jQuery
关注(0)|答案(1)|浏览(93)

我有一个外部程序的调用,但我想把输出在一个文本区域使用 AJAX 和html。我得到的唯一返回值是stdout的最后一行。

result = subprocess.Popen(command_analysis, stdout=subprocess.PIPE, 
                          stderr=subprocess.STDOUT, shell=True)
            while True:

                output_stdout = result.stdout.readline().decode().strip()

                if output_stdout == '' and result.poll() is not None:
                    break
            
                if output_stdout:
                    outreports = f'{self.OUTPUT}{self.name}_report.html
                    data = [output_stdout, outreports]

       return data

字符串
这些数据将用于js,我知道output_stdout变量正在覆盖它自己的值,但我如何才能做到这一点呢?

.
  .
  .
    data = {
          'stdout': result[0],
          'report': url_for("static", filename=result[1])
       }
    
       return jsonify(data)


AJAX

function executeAnalysis(dados){

   $.ajax({
         //async: true,
          url: '/analysis',
          data: dados,
          success: function (ret) {
            console.log(ret)
           console.log(ret.stdout)
           fitList(ret.report);
           $('.stdout').value += ret.stdout;
                
        },

           error: function(error) {
               console.log('Erro:', error);
           }

          });          
   }

vmdwslir

vmdwslir1#

您只需要在开始循环之前创建一个字符串变量,并通过连接将每一行添加到此变量。

result = subprocess.Popen(command_analysis, stdout=subprocess.PIPE, 
                            stderr=subprocess.STDOUT, shell=True)
    output = ""
    while True:

        output_stdout = result.stdout.readline().decode().strip()
        output += output_stdout + "\n"

        if output_stdout == '' and result.poll() is not None:
            break

        if output_stdout:
            outreports = 'report.html'
            data = [output, outreports]

    return data

字符串

相关问题