Проблема с python3 вызывает библиотеку с помощью runuser - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть этот базовый c python скрипт test.py, использующий библиотеку invoke:

#!/usr/bin/python3

from invoke import run

run('whoami')

И когда я пытаюсь запустить его, используя runuser как root, он не работает.

Команда выполнена:

runuser -l david -c '/home/david/test.py'

Stacktrace:

Traceback (most recent call last):
  File "/home/david/test.py", line 5, in <module>
    run('whoami')
  File "/home/david/.local/lib/python3.6/site-packages/invoke/__init__.py", line 48, in run
    return Context().run(command, **kwargs)
  File "/home/david/.local/lib/python3.6/site-packages/invoke/context.py", line 94, in run
    return self._run(runner, command, **kwargs)
  File "/home/david/.local/lib/python3.6/site-packages/invoke/context.py", line 101, in _run
    return runner.run(command, **kwargs)
  File "/home/david/.local/lib/python3.6/site-packages/invoke/runners.py", line 363, in run
    return self._run_body(command, **kwargs)
  File "/home/david/.local/lib/python3.6/site-packages/invoke/runners.py", line 422, in _run_body
    return self.make_promise() if self._asynchronous else self._finish()
  File "/home/david/.local/lib/python3.6/site-packages/invoke/runners.py", line 474, in _finish
    raise ThreadException(thread_exceptions)
invoke.exceptions.ThreadException: 
Saw 1 exceptions within threads (OSError):


Thread args: {'kwargs': {'echo': None,
            'input_': <_io.TextIOWrapper name='<stdin>' mode='r' encoding='ANSI_X3.4-1968'>,
            'output': <_io.TextIOWrapper name='<stdout>' mode='w' encoding='ANSI_X3.4-1968'>},
 'target': <bound method Runner.handle_stdin of <invoke.runners.Local object at 0x7f7a767b5e10>>}

Traceback (most recent call last):

  File "/home/david/.local/lib/python3.6/site-packages/invoke/util.py", line 233, in run
    super(ExceptionHandlingThread, self).run()

  File "/usr/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)

  File "/home/david/.local/lib/python3.6/site-packages/invoke/runners.py", line 813, in handle_stdin
    with character_buffered(input_):

  File "/usr/lib/python3.6/contextlib.py", line 81, in __enter__
    return next(self.gen)

  File "/home/david/.local/lib/python3.6/site-packages/invoke/terminals.py", line 176, in character_buffered
    or not stdin_is_foregrounded_tty(stream)

  File "/home/david/.local/lib/python3.6/site-packages/invoke/terminals.py", line 139, in stdin_is_foregrounded_tty
    return os.getpgrp() == os.tcgetpgrp(stream.fileno())

OSError: [Errno 25] Inappropriate ioctl for device

Я знаю, что это можно сделать с помощью sudo -u david, но так как это всего лишь упрощенный пример, мне нужно использовать его с runuser.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...