【发布时间】:2021-05-28 20:38:44
【问题描述】:
所以我有一个有点奇怪的新问题,我正在尝试在 Flask 中打开一个外部程序(该程序是用 C++ 编写但编译为 .exe 文件),我可以用 cmd 运行它,我可以通过单击运行它并且它们都可以正常工作,但是当我尝试用 python 打开它们时,程序窗口在我的窗口中启动,然后立即停止,我什至看不到它 1 秒。 关于我的 C++ 程序,它读取一些文本文件的输入,然后在读取后创建更多文本文件。 我已经使用过:subprocess.call、subprocess.Popen、os.startfile、os.system。 我知道我的程序地址是有效的,因为我的应用程序启动但它立即停止。 python中没有错误,使用os.system等时cmd中没有错误。 我很想得到任何建议。 当前代码:
if request.method == 'POST' and 'checkbox' in request.form:
if request.form.get("checkbox") is not None:
os.startfile(r"C:\Users\Administrator\flaskProject\upload\19\29\engine\engine.exe")
【问题讨论】:
-
为什么
subprocess.run()不用于运行subprocess module 的Python 文档推荐的可执行文件?subprocess模块在 Windows 上是 Windows 内核库函数 CreateProcess 的 Python 包装器,其结构 STARTUPINFO 在 Windows 上由任何能够启动可执行文件的可执行文件使用。 -
请同时阅读 os.startfile 的 Python 文档,它不是直接运行可执行文件,而是运行与文件扩展名关联的可执行文件,文件名作为参数传递给可执行文件以打开它由相关应用程序归档。在这种情况下,使用具有结构SHELLEXECUTEINFO 的函数ShellExecuteEx。
-
换句话说
os.startfile用于根据用户配置在默认浏览器中打开.html文件或在与该文件扩展名关联的文档处理应用程序中打开.docx文件。没有关联的可执行文件可打开文件扩展名为.exe的文件。出于这个原因,os.startfile是运行像engine.exe这样的可执行文件的错误函数。 -
@Mofi 感谢分享这些信息,我已经使用 subprocess.run 对其进行了测试,但我没有运气。当我直接从 python 运行 subprocess.run (没有烧瓶平台)它工作正常,但是当我在烧瓶中的应用程序路由下运行代码时,它不起作用,甚至使我的程序崩溃。我认为烧瓶和根据要求打开外部文件存在问题,但在互联网上甚至烧瓶文档上都没有关于它的信息。