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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

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

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
  1. echo пароль | sudo -S команда

А вообще-то, лучше такой скрипт запускать через sudo, а не хранить пароль в скрипте. Ну или сам скрипт должен делать запрос пароля у пользователя.
« Последнее редактирование: 29 Январь 2014, 02:08:48 от unimix »

Оффлайн Xyanight

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

Оффлайн RingOV

  • Активист
  • *
  • Сообщений: 724
    • Просмотр профиля
Xyanight,
рекомендуется использовать subprocess
Код: Python
  1. import subprocess
  2.  
  3. p = subprocess.Popen(["sudo", "ls", "-l"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
  4. out, err = p.communicate()
  5. print out
  6.  

Оффлайн Xyanight

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

Оффлайн RingOV

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


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

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

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

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

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

 

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