Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Модуль Python. Как с помощью модуля commands выполнить команду с sudo?  (Прочитано 4923 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Xyanight

  • Автор темы
  • Забанен
  • Участник
  • *
  • Сообщений: 147
  • Это просто какой-то Python!
    • Просмотр профиля
Вопрос по модулю commands.
Как известно код:

#! /usr/bin/env python
# Code for Python 2.7.

import commands

operation = "ls"
result = commands.getoutput(operation)

print result

выведет список файлов в текущей директории.

Вопрос: как выполнить операцию если переменной operation присвоить значение "sudo ... [какая-то операция]"? То есть,
по сути, мы должны ввести пароль, как в терминале. В результате выполнения операций с "sudo", в консоли выводится сообщение,
что пароль введен неправильно три раза. То есть мне нужно с помощью модуля commands выполнять команды "sudo". Как быть?
Это просто какой-то Python!

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Код: (bash) [Выделить]
echo пароль | sudo -S команда
А вообще-то, лучше такой скрипт запускать через sudo, а не хранить пароль в скрипте. Ну или сам скрипт должен делать запрос пароля у пользователя.
« Последнее редактирование: 29 Января 2014, 02:08:48 от unimix »

Оффлайн Xyanight

  • Автор темы
  • Забанен
  • Участник
  • *
  • Сообщений: 147
  • Это просто какой-то Python!
    • Просмотр профиля
unimix,
Спасибо, потом проверю :)
Это просто какой-то Python!

Оффлайн RingOV

  • Активист
  • *
  • Сообщений: 764
    • Просмотр профиля
Xyanight,
рекомендуется использовать subprocess
Код: (Python) [Выделить]
import subprocess

p = subprocess.Popen(["sudo", "ls", "-l"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = p.communicate()
print out

Оффлайн Xyanight

  • Автор темы
  • Забанен
  • Участник
  • *
  • Сообщений: 147
  • Это просто какой-то Python!
    • Просмотр профиля
RingOV,
А пароль где писать? Вариант с модулен commands в десять раз проще. Я думаю, этого достаточно :)  К тому же, чем проще, тем лучше. Спасибо.
Это просто какой-то Python!

Оффлайн RingOV

  • Активист
  • *
  • Сообщений: 764
    • Просмотр профиля
Xyanight,
Так он сам спросит, если в терминале запускать.


А если не в терминале, то gksu и немного изменить:
Код: (Python) [Выделить]
import subprocess
 
p = subprocess.Popen(["gksu", "ls -l"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = p.communicate()
print out

К тому же можно отслеживать ошибки

out - вывод команды
err - ошибки

Цитата про commands из документации
Deprecated since version 2.6: The commands module has been removed in Python 3. Use the subprocess module instead.

Ну а что использовать - ваше дело, удачи!

 

Страница сгенерирована за 0.031 секунд. Запросов: 25.