首页 > 解决方案 > uWSGI + Python子进程不执行shell命令

问题描述

uwsgi + Python 子进程

大家好,

我正在尝试使用 Python 子进程模块在 shell 中运行一个简单的命令,一切正常,直到我将 uwsgi 放在顶部。我也使用烧瓶作为网络框架。

这是代码的非常简化的部分

if request.method == 'POST':  

            testquery = subprocess.run( "ifconfig", shell=True,stdout=subprocess.PIPE,universal_newlines=True )
            whoisresults=whoisquery.stdout
            print(whoisresults)

我收到以下错误:/bin/sh: 1: ifconfig: not found

我用 Python virtual evn 运行的完整路径替换了“ifconfig”。

testquery = subprocess.run( "/home/net/netools/netoolsenv/bin ifconfig", shell=True,stdout=subprocess.PIPE,universal_newlines=True )
            whoisresults=whoisquery.stdout
            print(whoisresults)

但它仍然不起作用,只是错误不同 - /bin/sh: 1: /home/net/netools/netoolsenv/bin: Permission denied

谁能建议我应该朝哪个方向挖掘?我是这里的初学者。

标签: pythonsubprocess

解决方案


我收到以下错误:/bin/sh: 1: ifconfig: not found

uWSGI 守护进程通常作为另一个用户运行,并且这个用户没有PATH设置。使用完整的绝对路径ifconfig

要查找工具的完整路径,请使用which,例如在终端运行此命令:

$ which ifconfig
/usr/bin/ifconfig

ifconfig并在您的 Python 脚本中使用该完整路径。

testquery = subprocess.run( "/usr/bin/ifconfig", shell=True,stdout=subprocess.PIPE,universal_newlines=True )

推荐阅读