44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
import os
|
|
import subprocess
|
|
|
|
|
|
def run_command(command):
|
|
res = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE)
|
|
|
|
out, err = res.communicate()
|
|
if res.returncode != 0:
|
|
output = out.decode().strip() + "\n\n" + err.decode().strip()
|
|
else:
|
|
output = out.decode().strip()
|
|
return (res.returncode, output)
|
|
|
|
|
|
def read_file(filename):
|
|
with open(filename, "r") as f:
|
|
content = f.read()
|
|
return content
|
|
|
|
|
|
def loop_setup(filename):
|
|
if filename.endswith(".xz") and not os.path.exists(filename[:-3]):
|
|
ret, out = run_command("xz --decompress --keep %s" % filename)
|
|
if ret != 0:
|
|
raise RuntimeError("Failed to decompress file %s: %s" % (filename, out))
|
|
filename = filename[:-3]
|
|
|
|
ret, out = run_command("losetup --show --partscan -f %s" % filename)
|
|
if ret != 0:
|
|
raise RuntimeError("Failed to create loop device from %s: %s" % (filename, out))
|
|
return out
|
|
|
|
|
|
def loop_teardown(loopdev, filename=None):
|
|
ret, out = run_command("losetup -d %s" % loopdev)
|
|
if ret != 0:
|
|
raise RuntimeError("Failed to detach loop device %s: %s" % (loopdev, out))
|
|
|
|
# remove the extracted test file
|
|
if filename and filename.endswith(".xz") and os.path.exists(filename[:-3]):
|
|
os.remove(filename[:-3])
|