Скрипт Python не работает при запуске через osascript

Итак, когда я запускаю эту команду:

sudo python3.5 /path/to/my/script.py

Он выполняется нормально и возвращает:

выберите пользователя:

  1. гость
  2. Мое имя пользователя

    Выберите аккаунт, который необходимо очистить (введите соответствующий номер):

После чего я ввожу "2", нажимаю ввод и скрипт работает отлично.

Тем не менее, когда я бегу:

osascript -e 'do shell script "python3.5 /Path/to/my/script.py" with administrator privileges'

Я получаю ожидаемое всплывающее окно для ввода моего sudo-пароля, но после этого он выдает ошибку:

OSError: [Errno 9] Плохой дескриптор файла (1) нуждается в очистке (введите соответствующий номер):")

У кого-нибудь есть идеи по этому поводу? Любая помощь будет принята с благодарностью!

PS; некоторые сведения о том, почему мне нужен этот метод -> я использую предварительный сценарий (также написанный на python), из которого необходимо выполнить myscript.py. Мой prescript.py не нуждается в правах администратора. Иногда, однако, потребуется вызвать myscript.py, который требует административных привилегий. Поскольку я не хочу жестко кодировать свой sudo-пароль в любом из моих сценариев, я хочу получить всплывающее окно с просьбой об этом. Я решил, что мой pre-script.py скажет запустить subprocess.Popen([]) по команде osascript, которую я упомянул выше, и сделает свое дело. Однако для этого мне сначала нужно заставить команду osascript работать правильно.

1 ответ

Решение

Ах, так что я понял это сам. Как и следовало ожидать, это было связано с привилегиями. как-то "do shell script" запускается через другие привилегии, а затем просто вводит команду в терминале. А также "sudo command" в терминале не равно (полностью) "do shell script [script] with administrator privileges",

Для меня то, что исправило это, было навигация к:

Системные настройки -> Безопасность и конфиденциальность -> вкладка Конфиденциальность -> Специальные возможности

А затем перетащите Python.app и Terminal.app в это окно (вам может понадобиться сначала разблокировать его, нажав на небольшой замок в левом нижнем углу этого окна).

Другие вопросы по тегам