그래서 파이썬으로 점점 그리고 난에 스크립트를 쓰고 있어요 : urllib.urlretrieve를 사용Python -이 출력을 보는 이유는 무엇입니까?
- 을 다운로드합니다 RPM.
- rpm2cpio 및 cpio를 사용하여 파일의 압축을 풉니 다.
- 파일과 관련된 작업을 수행하십시오.
- shutil.rmtree를 사용하여 정리하십시오.
기능적으로 그것이이 모든 일을합니까 모든 좋은 그러나 나는이 정리 코드에 넣어 이후로는 다음과 같은 출력 받고 있어요 :
#!/usr/bin/python
from contextlib import contextmanager
import os, subprocess, shutil
@contextmanager
def cd(directory):
startingDirectory = os.getcwd()
os.chdir(os.path.expanduser(directory))
try:
yield
finally:
os.chdir(startingDirectory)
# Extract the files from the RPM to the temp directory
with cd("/tempdir"):
rpm2cpio = subprocess.Popen(["rpm2cpio", "MyRPM.rpm"], stdout=subprocess.PIPE)
cpio = subprocess.Popen(["cpio", "-idm", "--quiet"], stdin=rpm2cpio.stdout, stdout=None)
# Do
# Some
# Things
# Involving
# Shenanigans
# Remove the temp directory and all it's contents
shutil.rmtree("/tempdir")
: 여기
rpm2cpio: MyRPM.rpm: No such file or directory
cpio: premature end of archive
코드입니다
여기에 코드의 일부 구문 문제가 있거나 누락 된 가져 오기 또는 기타 사항이있는 경우 실제로 두 메시지가 표시되는 이유와 관련이 있지 않으면 무시하십시오. 나는 스크립트를 관련 비트로 줄이려고했다. 내가 찾고있는 것은 위의 두 메시지가 인쇄되는 이유에 대한 설명입니다. 스크립트가 위에서 아래로 실행되었다고 생각 했겠지만 지금은이 경우에 잘못 생각할 수 있습니다.
편집 : 'rpm2cpio'및 'cpio'명령을 사용하면 스크립트가 명시 적으로 닫아야 할 필요가있는 것처럼 실행되는 동안 아무 것도 열리지 않는 것처럼 느껴질 수 있습니다 ...? 그게 말이 되니? :)
고마워요! 당신은 기본적으로 경쟁 조건 그래서 는 J
1) 루트가 아닌 폴더의 절대 경로입니까? 일반적으로 임시 디렉토리와 파일은/tmp의 _inside_를 만듭니다. 2)이 임시 디렉토리를 만들었습니까? 최소한 당신이 제시 한 것은 그것이 존재하지 않는다는 것을 시사합니다. 3) 임시 디렉토리에'MyRPM.rpm'을 넣지는 않았다. 이 중 하나 또는 모두가 RPM을 찾을 수없는'rpm2cpio '를 설명 할 수 있습니다. – hunteke
@hunteke 1) 절대 경로입니다. 예. 현재 스크립트 옆에 디렉토리를 만들고 거기에 RPM을 넣고 있습니다./tmp 결국 조언을 주셔서 감사합니다 2) 내가 말했듯이 내가 기능적으로 모든 일을하고있다 그래, 나는 임시 디렉토리를 만들고 그것 안에 RPM 파일을 성공적으로 추출 3) 2와 같은, 감사 – Jaymoney
스크립트가 제대로 기다리고 있습니다 'rpm2cpio'와'cpio'가 작업을 끝내고 있습니까? 스크립트가 작업을 수행하기 전에 임시 디렉토리를 제거하면 해당 메시지를 설명합니다. – hunteke