Уведомления

Группа в Telegram: @pythonsu

#1 Июль 5, 2011 16:35:26

Manul
От:
Зарегистрирован: 2010-09-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение сторонних программ в коде Python

Задача: написать скрипт, который бы при некотором условии погружал компьютер в спящий режим.
Проблема: в Linux для этого требуется выполнить скрипт pm-suspend, который может выполняться только root'ом.
Возможные пути решения: в модуле OS есть функции “system” (выполняет команду в треминале) и “execv” (выполняет программу с данными параметрами). Возможно, как-то через них надо сначала запустить su, а потом проделать какие-то манипуляции - не знаю.
Сам вопрос: как заставить Python выполнить скрипт pm-suspend.

import threading as t
import os

text = ''

class inp(t.Thread):
def run(self):
global text
text = raw_input("Введдите любой символ, чтобы оставить компьютер включенным.\n")

def shutdown():
if len(text) == 0:
#Здесь должен быть код, который будет выполнять скрипт pm-suspend
else:
print 0

ekz = inp()
ekz.setDaemon(1)
ekz.start()

t = t.Timer(10.0,shutdown)
t.start()



Офлайн

#2 Июль 5, 2011 17:32:36

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Выполнение сторонних программ в коде Python

команду добавить в судоерсы, тогда можно выполнять её не только от рута: http://www.py-my.ru/post/4bfb3c6b1d41c846bc0000d3
Запуск приложений, например: http://www.py-my.ru/post/4bfb3c691d41c846bc000061

Офлайн

#3 Июль 5, 2011 18:20:48

Manul
От:
Зарегистрирован: 2010-09-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение сторонних программ в коде Python

o7412369815963
команду добавить в судоерсы, тогда можно выполнять её не только от рута: http://www.py-my.ru/post/4bfb3c6b1d41c846bc0000d3
Проделал все в точности как по ссылке. Мой юзер в группе admin. Результат нулевой.



Офлайн

#4 Июль 5, 2011 20:49:42

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Выполнение сторонних программ в коде Python

Manul
o7412369815963
команду добавить в судоерсы, тогда можно выполнять её не только от рута: http://www.py-my.ru/post/4bfb3c6b1d41c846bc0000d3
Проделал все в точности как по ссылке. Мой юзер в группе admin. Результат нулевой.
Дистриб. какой?
Покажите файл /etc/sudoers и команду запуска.

Офлайн

#5 Июль 5, 2011 20:57:17

Manul
От:
Зарегистрирован: 2010-09-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение сторонних программ в коде Python

o7412369815963
Дистриб. какой?
Ubuntu 10.10 Maverick
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL) ALL

# Allow members of group sudo to execute any command after they have
# provided their password
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
%admin ALL=NOPASSWD:/usr/lib/pm-utils/bin/pm-action
#
#includedir /etc/sudoers.d

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
В файле sudoers пробовал следующие варианты:
%admin ALL=NOPASSWD:/usr/sbin/pm-suspend
myusername ALL=NOPASSWD:/usr/lib/pm-utils/bin/pm-action
myusername ALL=NOPASSWD:/usr/sbin/pm-suspend
Мой юзер точно находится в группе admin.

Команду запуска где? Не понял Вас слегка. Если в sudoers, то выше. В коде использовал os.system('sudo pm-suspend') и все остальные вышеперечисленные вариации.



Отредактировано (Июль 6, 2011 15:03:18)

Офлайн

#6 Июль 6, 2011 08:45:38

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение сторонних программ в коде Python

Manul
А что мешает сделать через subprocess.Popen() и передать процессу пароль с помощью communicate()?



Офлайн

#7 Июль 6, 2011 09:42:03

Manul
От:
Зарегистрирован: 2010-09-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение сторонних программ в коде Python

Enchantner
А что мешает сделать через subprocess.Popen() и передать процессу пароль с помощью communicate()?
По большому счету ничего, просто это как-то мудрено. Надо будет разобраться с этими subprocess, потому что первый раз о них слышу:)
Спасибо за наводку, пойду покурю маны.



Офлайн

#8 Июль 6, 2011 10:16:11

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Выполнение сторонних программ в коде Python

Enchantner
Manul
А что мешает сделать через subprocess.Popen() и передать процессу пароль с помощью communicate()?
нехорошо светить пароль, да и зачем это все, если можно без ввода пароля.

Офлайн

#9 Июль 6, 2011 10:19:01

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Выполнение сторонних программ в коде Python

должно быть примерно так:
%admin ALL = NOPASSWD: /usr/sbin/pm-suspend

а запускать например так:
os.system('sudo /usr/sbin/pm-suspend')

Офлайн

#10 Июль 6, 2011 15:20:23

Manul
От:
Зарегистрирован: 2010-09-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение сторонних программ в коде Python

o7412369815963 к сожалению этот способ не канает. По прежнему запрашивает пароль от sudo. Придется, наверно, делать как сказал Enchantner.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version