必须更改What特定的语法或配置,才能获得RHEL8 vm以成功运行以下简单的python程序?
PROBLEM定义:
一个简单的python 3程序使用子流程模块调用另一个简单的python 3程序。在Windows中运行时,预期的输出结果,但在RHEL 8中运行时,会出现以下错误:
b'/bin/sh: python: command not found\n'THE两个简单程序:
command_test.py的内容如下:
import subprocess
def runShellCommand(commandToRun):
proc = subprocess.Popen( commandToRun,cwd=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
while True:
line = proc.stdout.readline()
if line:
print(line)
else:
break
myCmd = "python call_me.py"
runShellCommand(myCmd)call_me.py的内容如下:
print("If you see this, then I was called correctly.")SUCCESSFULL窗口结果:
在Windows中运行时,两个简单的程序给出了预期的结果如下:
C:\path\to\somedir>python command_test.py
b'If you see this, then I was called correctly.\r\n'LINUX错误结果:
在RHEL8虚拟机中运行时,将产生以下错误输出:
[user@someVMSS000001 somedir]$ python command_test.py
b'/bin/sh: python: command not found\n'但是,当我们从终端直接调用第二个程序时,第二个程序运行良好,如下所示:
[user@someVMSS000001 somedir]$ python call_me.py
If you see this, then I was called correctly.当我们从终端中检查python是否安装时,我们还可以确认python确实已经安装并可见,如下所示:
[user@someVMSS000001 somedir]$ python --version
Python 3.8.12云-INIT PYTHON安装代码:
提供VM的云init文件中的以下行定义了导致上述问题的python配置:
dnf install python3.8 -y
dnf remove python3.6 -y
rm -rf /usr/bin/python3
mv /usr/bin/python3.8 /usr/bin/python3
python3 --version
dnf install -y python3-setuptools
dnf install python3-pip -y
python3 -m pip install pyyaml
python3 -m pip install requests
python3 -m pip install awscli
#Set alias so python commands use python3
echo "alias python=python3" >> /etc/bashrc
dnf clean all
dnf update python3 -y
python3 --versionSo问题似乎是在rhel8中运行子进程模块时,python看不到python。
发布于 2022-07-28 02:09:25
在交互式bash中,python通过别名解析为python3。
别名不被继承,因此/bin/sh子进程无法解决它.尽管您可以创建一个符号链接,以便python通过shell的继承PATH解析为python3,但最佳实践是显式地指定python3。
参见RHEL 8中的Python中的相关讨论
https://unix.stackexchange.com/questions/711544
复制相似问题