28 lines
1 KiB
Python
28 lines
1 KiB
Python
from os import fdopen
|
|
from dbus import SystemBus, Array
|
|
|
|
|
|
def run(host, cmd, user=None):
|
|
bus = SystemBus()
|
|
remote_object = bus.get_object('org.freedesktop.machine1',
|
|
'/org/freedesktop/machine1',
|
|
False,
|
|
)
|
|
if user is not None:
|
|
cmd = ['/bin/su', '-', user, '-s', '/bin/bash', '-c', ' '.join(cmd)]
|
|
res = remote_object.OpenMachineShell(host,
|
|
'',
|
|
cmd[0],
|
|
Array(cmd, signature='s'),
|
|
Array(['TERM=dumb'], signature='s'),
|
|
dbus_interface='org.freedesktop.machine1.Manager',
|
|
)
|
|
fd = res[0].take()
|
|
fh = fdopen(fd)
|
|
while True:
|
|
try:
|
|
yield fh.readline().strip()
|
|
except OSError as err:
|
|
if err.errno != 5:
|
|
raise err from err
|
|
break
|