我正在尝试使用Flask打开一个带有html按钮的.exe文件(例如Paint),所以我编写了一个小的.bat文件,当我通过Python运行它时,它运行正常,但是当我运行时它似乎不起作用通过Flask打开它。
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文件在Flask之外工作,但是我已经尝试使用exe和bat都在'static'文件夹和C:/上并且似乎完全没有响应(没有控制台反馈),所以我想我可能会丢失什么重要的?
答案 0 :(得分:1)
更改后找到解决方案:
filepath="/static/run.bat"
p = subprocess.Popen(filepath, shell=True, stdout = subprocess.PIPE)
stdout, = p.communicate()
有:
subprocess.call(["static/myFile.exe"])
现在它有效。我绕过了bat文件,但不确定原始脚本的问题是什么,所以任何见解仍然是受欢迎的。