python + os.system에서 값을 인쇄하는 방법

python + os.system에서 값을 인쇄하는 방법

이 간단한 Python 스크립트가 실제 Redhat 버전을 인쇄하지 않는 이유는 무엇입니까?

version = os.system( ' cat /etc/redhat-release  | awk \'{print $7}\' '  )
print ("my version is " ,version)

내가 실행할 때

우리는:

7.2
('my version is ', 0)
  1. 왜 7.2 대신 0이 나오나요?
  2. os.system에서 버전 7.2를 가져오는 것을 방지하는 방법은 무엇입니까?

답변1

os.system()프로세스를 실행하면 됩니다., 이는 출력을 캡처하지 않습니다.

명령이 출력을 생성하면 인터프리터 표준 출력 스트림으로 전송됩니다.

반환 값은 프로세스의 종료 코드입니다.

Unix에서 반환 값은 wait()에 의해 지정된 형식으로 인코딩된 프로세스의 종료 상태입니다.

당신은 다음과 같은 것을 사용해야합니다subprocess.check_output()또는 subprocess.Popen()출력을 직접 캡처합니다.

>>> arch = subprocess.check_output("uname -a | awk '{print $9}'", shell=True);
>>> arch
'x86_64\n'

답변2

subprocess모듈을 사용하면 이를 매우 쉽게 달성할 수 있습니다.

#!/usr/bin/python3

import subprocess
getVersion =  subprocess.Popen("awk '{print $7}' /etc/redhat-release", shell=True, stdout=subprocess.PIPE).stdout
version =  getVersion.read()

print("My version is", version.decode())

또는 awk부품의 경우 를 사용할 수 있습니다 sed 's/[^0-9_.-]//g /etc/redhat-release. 이렇게 하면 버전 번호만 추출되며 버전 번호가 어떤 필드인지 알 필요가 없으므로 플랫폼에 더 독립적입니다.

답변3

예를 들어 다음을 수행할 수 있습니다.

os.system("ping 1.1.1.1 >> ping.txt")
with open("ping.txt", "r") as ping:
    print(ping.read())

관련 정보