だから私は、Pythonに取得していますし、私は、スクリプトを書いている:Python - この出力が表示されるのはなぜですか?
- urllib.urlretrieveを使用して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
コードです
ここでコードの構文上の問題(またはインポートや抜けなど)が表示された場合は、2つのメッセージが表示されている理由に実際に関係しない限り、無視してください。私は関連するビットへのスクリプトを削除しようとしました。私が探しているのは、なぜ上記の2つのメッセージが印刷されているのかという説明です。 私はスクリプトがトップダウンから実行されると仮定していましたが、今は私がこのケースで間違っていると思っていますか?
編集:スクリプトが明示的に閉じる必要があるように実行されている限り、 'rpm2cpio'と 'cpio'コマンドは何かを開いたままにしているように感じます...?それは意味をなさないでしょうか? :)
ありがとう! J
1)ルートからのフォルダへの絶対パスですか?通常、一時的なディレクトリとファイルを作成するために、 '/ tmp'の_inside_を作成します。 2)この一時ディレクトリを作成しましたか?少なくともあなたが示したものは、それが存在しないことを示唆しています。 3)一時ディレクトリに 'MyRPM.rpm'を置いたことはありません。これらのうちの1つまたはすべてが、あなたのRPMを見つけることができない 'rpm2cpio'を説明するかもしれません。 – hunteke
@hunteke 1)絶対パスです。はい、現在、スクリプトの横にディレクトリを作成してRPMを配置しています。私は/ tmpに最終的にアドバイスをしていただきありがとうございます2)私は機能的にすべてがうまくいっていると言いましたので、私はtempディレクトリを作成していて、RPMファイルをうまく抽出しています3)2と同じで、ありがとう – Jaymoney
スクリプトは正しく'rpm2cpio'と' cpio'は作業を終了しますか?スクリプトが作業を行う前に一時ディレクトリを削除した場合、それらのメッセージを処理します。 – hunteke