uWSGI python 子进程 chrome/firefox 失败
uWSGI python subprocess chrome/firefox failed
我在 uWSGI 下有一个 python flask 应用程序,使用 nginx 提供服务。
python 代码调用 subprocess.Popen()
到 运行 浏览器(即 Firefox,Chrome)但是 uWSGI 日志显示错误。
该错误与 linux(ubuntu) 标准命令有关,即 readlink
、which
、cat
等。
我怀疑这与用户访问有关,但不确定。
uWSGI 服务 运行s 使用我的用户和 www-data
组。
Python代码
import subprocess
@app.route('/api/check/version', methods=['POST'])
def check_version():
pid = subprocess.Popen(['/usr/bin/firefox', '--version'], stdout=subprocess.PIPE)
#pid = subprocess.Popen(['/usr/bin/google-chrome', '--version'], stdout=subprocess.PIPE)
data = pid.communicate()
return data
if __name__ == "__main__":
check_version()
uWSGI日志
**in case of doing Popen for /usr/bin/firefox
/usr/bin/firefox: 1: /usr/bin/firefox: which: not found
**in case of doing Popen for /usr/bin/google-chrome
/usr/bin/google-chrome-stable: line 8: readlink: command not found
/usr/bin/google-chrome-stable: line 10: dirname: command not found
/usr/bin/google-chrome-stable: line 46: exec: cat: not found
/usr/bin/google-chrome-stable: line 45: exec: cat: not found
uWSGI 服务配置
[Unit]
Description=uWSGI instance to serve myproject
After=network.target
[Service]
User=myuser
Group=www-data
WorkingDirectory=/home/gbadmin/myproject
Environment="PATH=/home/gbadmin/myproject/myprojectenv/bin"
ExecStart=/home/gbadmin/myproject/myprojectenv/bin/uwsgi --ini myproject.ini
[Install]
WantedBy=multi-user.target
我不是在回答你的问题,但我想我正在解决你遇到的问题。作为替代方案,您可以 dpkg -s firefox | grep '^Version:'
而不是您正在使用的方法。
您给 PATH
的值限制太多:
Environment="PATH=/home/gbadmin/myproject/myprojectenv/bin"
有问题的缺失命令通常出现在 /bin
或 /usr/bin
中,将这些添加到路径变量可能会解决您的问题
Environment="PATH=/home/gbadmin/myproject/myprojectenv/bin:/usr/bin:/bin"
我在 uWSGI 下有一个 python flask 应用程序,使用 nginx 提供服务。
python 代码调用 subprocess.Popen()
到 运行 浏览器(即 Firefox,Chrome)但是 uWSGI 日志显示错误。
该错误与 linux(ubuntu) 标准命令有关,即 readlink
、which
、cat
等。
我怀疑这与用户访问有关,但不确定。
uWSGI 服务 运行s 使用我的用户和 www-data
组。
Python代码
import subprocess
@app.route('/api/check/version', methods=['POST'])
def check_version():
pid = subprocess.Popen(['/usr/bin/firefox', '--version'], stdout=subprocess.PIPE)
#pid = subprocess.Popen(['/usr/bin/google-chrome', '--version'], stdout=subprocess.PIPE)
data = pid.communicate()
return data
if __name__ == "__main__":
check_version()
uWSGI日志
**in case of doing Popen for /usr/bin/firefox
/usr/bin/firefox: 1: /usr/bin/firefox: which: not found
**in case of doing Popen for /usr/bin/google-chrome
/usr/bin/google-chrome-stable: line 8: readlink: command not found
/usr/bin/google-chrome-stable: line 10: dirname: command not found
/usr/bin/google-chrome-stable: line 46: exec: cat: not found
/usr/bin/google-chrome-stable: line 45: exec: cat: not found
uWSGI 服务配置
[Unit]
Description=uWSGI instance to serve myproject
After=network.target
[Service]
User=myuser
Group=www-data
WorkingDirectory=/home/gbadmin/myproject
Environment="PATH=/home/gbadmin/myproject/myprojectenv/bin"
ExecStart=/home/gbadmin/myproject/myprojectenv/bin/uwsgi --ini myproject.ini
[Install]
WantedBy=multi-user.target
我不是在回答你的问题,但我想我正在解决你遇到的问题。作为替代方案,您可以 dpkg -s firefox | grep '^Version:'
而不是您正在使用的方法。
您给 PATH
的值限制太多:
Environment="PATH=/home/gbadmin/myproject/myprojectenv/bin"
有问题的缺失命令通常出现在 /bin
或 /usr/bin
中,将这些添加到路径变量可能会解决您的问题
Environment="PATH=/home/gbadmin/myproject/myprojectenv/bin:/usr/bin:/bin"