이 간단한 Python 스크립트가 실제 redhat 버전을 인쇄하지 않는 이유는 무엇입니까?
version = os.system( " cat /etc/redhat-release | awk \"{print $7}\" " ) print ("my version is " ,version)
실행했을 때
:
7.2 ("my version is ", 0)
- 이유 0 대신 7.2?
- OS.system에서 버전 7.2를 가져 오는 것을 피하는 방법은 무엇입니까?
댓글
- Python2 또는 Python3?
- SO로 이동해야합니까?
Answer
os.system()
는 프로세스 만 실행하고 출력을 캡처하지는 않습니다.
명령이 출력을 생성하면 인터프리터 표준 출력 스트림으로 전송됩니다.
반환 값은 다음과 같습니다. 프로세스의 종료 코드 :
Unix에서 반환 값은 wait ()에 지정된 형식으로 인코딩 된 프로세스의 종료 상태입니다.
직접 출력을 캡처합니다.
>>> arch = subprocess.check_output("uname -a | awk "{print $9}"", shell=True); >>> arch "x86_64\n"
댓글
- 좋습니다. 그러나 위의 예에서 " \ n "없이 x86_64 만 캡처하는 방법은 무엇입니까?
- @janga , use arch [:-1]?
- ok, works, 또 다른 마지막 질문, os.system에서 인쇄를 피하는 방법, 예 : os.system (' sed -is " /7.0/$new_version/g " / tmp / file), 교체 할 문자열을 출력합니다.
- 줄 바꿈을 제거하려면
.rstrip()
를 사용하십시오.
- 모든 구문을 보여줄 수 있습니까?
Answer
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
를 사용할 수 있습니다. 이렇게하면 버전 번호 만 추출되며 “플랫폼 독립성을 높이기 위해 필드 버전 번호가 무엇인지 알 필요가 없습니다.
댓글
- 는 이 변수 (버전)는 " \ n "가 없습니다. 나중에이 변수를 파이썬 내부의 sed 명령에서 사용하고 싶기 때문입니다.
- ' 질문을받지 못했습니다. 무엇을 하던지 ' 이치가없는 것 같습니다.