Найти - Пользователи
Полная версия: Выполнение сторонних программ в коде Python
Начало » Python для новичков » Выполнение сторонних программ в коде Python
1 2 3
Manul
Задача: написать скрипт, который бы при некотором условии погружал компьютер в спящий режим.
Проблема: в 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()
o7412369815963
команду добавить в судоерсы, тогда можно выполнять её не только от рута: http://www.py-my.ru/post/4bfb3c6b1d41c846bc0000d3
Запуск приложений, например: http://www.py-my.ru/post/4bfb3c691d41c846bc000061
Manul
o7412369815963
команду добавить в судоерсы, тогда можно выполнять её не только от рута: http://www.py-my.ru/post/4bfb3c6b1d41c846bc0000d3
Проделал все в точности как по ссылке. Мой юзер в группе admin. Результат нулевой.
o7412369815963
Manul
o7412369815963
команду добавить в судоерсы, тогда можно выполнять её не только от рута: http://www.py-my.ru/post/4bfb3c6b1d41c846bc0000d3
Проделал все в точности как по ссылке. Мой юзер в группе admin. Результат нулевой.
Дистриб. какой?
Покажите файл /etc/sudoers и команду запуска.
Manul
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') и все остальные вышеперечисленные вариации.
Enchantner
Manul
А что мешает сделать через subprocess.Popen() и передать процессу пароль с помощью communicate()?
Manul
Enchantner
А что мешает сделать через subprocess.Popen() и передать процессу пароль с помощью communicate()?
По большому счету ничего, просто это как-то мудрено. Надо будет разобраться с этими subprocess, потому что первый раз о них слышу:)
Спасибо за наводку, пойду покурю маны.
o7412369815963
Enchantner
Manul
А что мешает сделать через subprocess.Popen() и передать процессу пароль с помощью communicate()?
нехорошо светить пароль, да и зачем это все, если можно без ввода пароля.
o7412369815963
должно быть примерно так:
%admin ALL = NOPASSWD: /usr/sbin/pm-suspend

а запускать например так:
os.system('sudo /usr/sbin/pm-suspend')
Manul
o7412369815963 к сожалению этот способ не канает. По прежнему запрашивает пароль от sudo. Придется, наверно, делать как сказал Enchantner.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB