mirror of
https://github.com/niess/python-appimage.git
synced 2025-09-05 17:20:15 +02:00
55 lines
1.2 KiB
Python
55 lines
1.2 KiB
Python
import os
|
|
import re
|
|
import subprocess
|
|
|
|
from .compat import decode
|
|
from .log import debug
|
|
|
|
|
|
__all__ = ['ldd', 'system']
|
|
|
|
|
|
try:
|
|
basestring
|
|
except NameError:
|
|
basestring = (str, bytes)
|
|
|
|
|
|
def system(args, exclude=None):
|
|
'''System call with capturing output
|
|
'''
|
|
cmd = ' '.join(args)
|
|
debug('SYSTEM', cmd)
|
|
|
|
if exclude is None:
|
|
exclude = []
|
|
elif isinstance(exclude, basestring):
|
|
exclude = [exclude]
|
|
else:
|
|
exclude = list(exclude)
|
|
exclude.append('fuse: warning:')
|
|
|
|
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE)
|
|
out, err = p.communicate()
|
|
if err:
|
|
err = decode(err)
|
|
stripped = [line for line in err.split(os.linesep) if line]
|
|
for pattern in exclude:
|
|
stripped = [line for line in stripped
|
|
if not line.startswith(pattern)]
|
|
if stripped:
|
|
raise RuntimeError(err)
|
|
|
|
return str(decode(out).strip())
|
|
|
|
|
|
_ldd_pattern = re.compile('=> (.+) [(]0x')
|
|
|
|
|
|
def ldd(path):
|
|
'''Get dependencies list of dynamic libraries
|
|
'''
|
|
out = system(('ldd', path))
|
|
return _ldd_pattern.findall(out)
|