2016-07-29 88 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文件,但不知道原始腳本有什麼問題,所以仍然歡迎任何見解。