У меня VPS под управлением Ubuntu 16.04, и я использую Python для автоматизации некоторых задач. Я написал простой скрипт, который создает несколько пользователей одновременно, используя команду newusers
. newusers
читает файл, содержащий данные пользователей, и создает новых пользователей на основе этих данных.
Сначала я создаю файл с именем users.txt
, в который я помещаю все пользовательские данные. После этого я вызываю newusers
для этого файла позже в моем скрипте, чтобы фактически сделать пользователей.
Я попытался использовать модуль os и subprocess для вызова команды sudo newusers users.txt
, однако оба не работали. Команда, однако, работает, когда я запускаю ее непосредственно из командной строки.
Здесь я попытался выполнить команду, используя подпроцесс:
create_users = subprocess.Popen(['sudo', 'newusers', 'users.txt'], shell=True)
Здесь я попробовал использовать os:
os.system('sudo newusers users.txt')
Я даже пытался создать внешний файл, который затем вызвал бы команду:
make_users = open('make_users.py', 'x')
make_users.write('#!/usr/bin/env python3\n\n\
import os\n\n\
os.system(\'sudo newusers users.txt\')')
os.system('python3 make_users.py')
Это - ссылка на весь код.
Проблема в том, что когда я запускаю sudo newusers users.txt
вручную (непосредственно из командной строки), команда работает отлично. Единственный раз, когда он не работает, это когда я запускаю его из скрипта Python.
Я думал, что, возможно, сценарий должен успешно завершиться, прежде чем я смогу запустить sudo newusers users.txt
Я не получаю никакой ошибки, на самом деле вывод подпроцесса - None
. Но когда я проверяю /etc/passwd
, пользователи не создаются.
Конечно, я мог бы просто запустить скрипт (который бы создал users.txt
), а затем просто запустить sudo newusers users.txt
прямо из командной строки, но я хочу понять, в чем проблема и почему я не могу выполнить ту же команду, используя Python.
PS: Права доступа не являются проблемой, поскольку я являюсь пользователем root.
Буду признателен за любую помощь!