Как запустить Python скрипт с root-правами без ввода пароля?

Есть скрипт на Python, который с помощью subprocess.call() запускает команду из терминала, но для выполнения этой команды требуются root-права и, соответственно, если добавить sudo, запрашивается пароль.

Как выдать root-права без ввода пароля, чтобы скрипт мог выполняться в фоне и вообще не требовал вмешательства пользователя?

Уточню, что требуется запускать sudo без пароля только для скрипта, а не для всей системы.

Фрагмент кода:

def check_updates():
     """
         Check updates, return amount of available to update packages.
         Otherwise (if no updates available) return 0 (zero).    
     """

     # Sync local package database with an online mirror
     subprocess.call(['sudo','pacman', '-Syy'])

     output = subprocess.check_output(['pacman', '-Qqu'])

     # Return updates number because each package name ends with "\" character
     output = str(output).count('\\')
     return output

Добавил это в /etc/sudoers.d/, но не помогло.

alexleet ALL=(root) NOPASSWD: /home/alexleet/projects/update-notifier/update-notifier.py

Скрипт запускаю из консоли так: sudo ./update-notifier


Ответы (1 шт):

Автор решения: MaxU

Во-первых старайтесь всегда использовать полные пути - хотя бы до того момента, пока не убедитесь, что все работает:

output = subprocess.check_output(['sudo', '/path/to/pacman', '-Qqu'])

Во-вторых в /etc/sudoers должна быть прописана программа, которую вы запускаете с предикатом sudo (NOTE: не забываем о полных путях):

alexleet ALL=(root) NOPASSWD: /path/to/pacman
→ Ссылка