RHEL8 가상 머신이 다음과 같은 간단한 Python 프로그램을 성공적으로 실행할 수 있도록 하려면 어떤 특정 구문이나 구성을 변경해야 합니까?
문제 정의:
간단한 Python 3 프로그램은 subprocess 모듈을 사용하여 또 다른 간단한 Python 3 프로그램을 호출합니다. Windows에서 실행하면 예상한 출력이 표시되지만 RHEL 8에서 실행하면 다음 오류가 표시됩니다.
b'/bin/sh: python: command not found\n'
두 가지 간단한 절차:
그 내용은 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.")
성공적인 Windows 결과:
이 두 가지 간단한 프로그램은 아래와 같이 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
클라우드 초기화 Python 설치 코드:
VM을 구성하는 cloud-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 --version
따라서 문제는 하위 프로세스 모듈이 rhel8에서 실행될 때 Python이 Python을 인식하지 못하는 것 같습니다.
답변1
대화형 bash 셸에서 python
별칭을 통해 해결합니다.python3
별칭은 상속되지 않으므로 /bin/sh
하위 프로세스에서 이를 확인할 수 없습니다. 비록 당신은할 수 있다쉘 상속을 통해 해결하기 위한 심볼릭 링크를 생성합니다 python
. 가장 좋은 방법은 이를 명시적으로 지정하는 것입니다.python3
PATH
python3
아래의 관련 토론을 참조하세요.RHEL 8의 Python