2016-07-29 168 views
0

我想用Flask打开一个html按钮打开一个.exe文件(例如Paint),所以我写了一个小的.bat文件,在我运行它时正确运行它Python,但是当我通过Flask打开它时似乎不起作用。通过Flask中的.bat文件打开.exe文件

Python的是:

@app.route('/assemblies', methods=['GET', 'POST']) 
def assemblies(): 
    if request.method == 'POST': 
     if request.form['submit'] == 'runFile': 
      #os.startfile("/static/run.bat") 
      text = "... running ..." 
      filepath="/static/run.bat" 
      p = subprocess.Popen(filepath, shell=True, stdout = subprocess.PIPE) 
      stdout, stderr = p.communicate() 
      return render_template('assemblies.html', text=text) 
     else request.form['submit'] == 'process': 
      [do other stuff] 
    elif request.method == 'GET': 
     return render_template('assemblies.html') 

的HTML文件(部分):

<div class="container"> 
    <form action="/assemblies" method="post"> ASSEMBLY <br> 
     <select name="Layer"> 
      <option value="1">1</option>   
      <option value="2">2</option> 
      <option value="3">3</option> 
      <option value="4">4</option> 
      <option value="5">5</option> 
     </select><br> 
     <button type="submit" name="submit" value="process"> Process </button> 
     <button type="submit" name="submit" value="runFile"> Run </button> 
    </form> 
</div> 

与蝙蝠是:

start /d "static\" myFile.exe 

BAT文件的工作瓶外,但我已经尝试过使用exe和bat在'static'文件夹和C:/中,并且似乎完全没有响应(没有控制台反馈),所以我认为我可能会错过重要的东西?

+0

如果你想控制台输出尝试使用'subprocess.call''Popen'不会阻塞并且是异步的,你也可以看看'stderr'变量,看看是否有什么可能导致你的问题,我不明白为什么你需要'.bat'文件(你可以直接从python direclty调用你的exe文件) – danidee

+0

Cheers @danidee,我正在尝试使用'Popen',但没有成功......我会看看'stderr'文档 – vabm

回答

1

找到了解决方案改变后:

filepath="/static/run.bat" 
p = subprocess.Popen(filepath, shell=True, stdout = subprocess.PIPE) 
stdout, = p.communicate() 

为:

subprocess.call(["static/myFile.exe"]) 

,现在它的工作原理。我绕过了bat文件,但不知道原始脚本有什么问题,所以仍然欢迎任何见解。