Python + Flask 搭建服务器后台,用 Apache 部署后代码中的可执行程序不显示如何解决?
RT,最近在自学 python 后台程序开发,用 flask 搭建了一段代码,正常在 IDE 和 pycharm 运行都正常,程序中有一句代码是用命令行运行电脑上的一段程序,最近想脱离开发环境搭建起来,在电脑上用 apache+mod wgsi 搭了起来,但是请求发过来以后运行的程序没有前段显示,请问这是啥情况,google 查了好久都查不到。
Python + Flask 搭建服务器后台,用 Apache 部署后代码中的可执行程序不显示如何解决?
看下日志 请求到哪里了
我遇到类似问题,通常是因为Apache的工作目录和权限设置导致的。Flask应用在Apache下运行时,当前工作目录可能不是你的项目目录,导致找不到可执行文件。
关键是要用绝对路径来调用可执行程序。假设你的可执行文件叫 my_program,放在项目根目录的 bin/ 文件夹里:
import os
import subprocess
from flask import Flask
app = Flask(__name__)
# 获取项目根目录的绝对路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
EXECUTABLE_PATH = os.path.join(BASE_DIR, 'bin', 'my_program')
@app.route('/run')
def run_program():
try:
# 使用绝对路径调用
result = subprocess.run(
[EXECUTABLE_PATH, 'arg1', 'arg2'],
capture_output=True,
text=True,
check=True
)
return f'程序输出:{result.stdout}'
except subprocess.CalledProcessError as e:
return f'执行失败:{e.stderr}', 500
except FileNotFoundError:
return f'找不到可执行文件:{EXECUTABLE_PATH}', 500
if __name__ == '__main__':
app.run()
另外检查Apache配置,确保有执行权限。在Apache的虚拟主机配置里(比如 /etc/apache2/sites-available/your-site.conf),确认WSGI进程有正确的权限:
WSGIDaemonProcess your_app user=www-data group=www-data threads=5
WSGIScriptAlias / /var/www/your_app/app.wsgi
<Directory /var/www/your_app>
WSGIProcessGroup your_app
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
部署后重启Apache:sudo systemctl restart apache2
总结:用绝对路径调用程序并检查Apache权限。
还是不要用 Apache 了?换 Nginx 吧。flask 的 app 生产上一般会用 gunicorn 起
运行可执行程序不显示,是什么意思…
你是说调用了一个 exe ?
别用阿帕奇
你的问题都没问清楚
--------------------------------
运行的程序没有前段显示
--------------------------------
这是啥意思, 是说运行的程序会显示数据到网页?
不加个日志 debug ?另外推一波 nginx+waitress 替换 Apache+mod_wgsi
https://www.findhao.net/easycoding/2218.html 在 Nginx 上部署 Python Flask 应用
为啥都推荐 nginx,apache 怎么了
日志里没有记录,情况是这样的,外部程序可以运行起来,但是无界面,只能在任务管理器里看到进程
对的,代码里调用了一个 exe 程序,但是程序运行起来没有显示,只能看到进程
字打错了,是运行的外部程序没有界面,只有进程
外部程序能运行… debug 看不出来
我去了解一下,多谢
之前也是用 bottle 写的程序,在 Apache+mod_wgsi 上居然运行不起来,因为程序里调用了很多子进程,最后折腾半天,换了 waitress 就可以了,还方便不用配置那么多
用 Apache 不好理解啊,谁家的教程这么写的?
碰到了和 LZ 相同的问题,在任务管理器里面看程序是启起来了,但是就是不弹出程序界面。请问一下最后是怎么解决的吗?


