Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 18, 2013 07:04:37

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

Проблемы с запуском через popen()

Добрый день.
У меня есть два скрипта, которые должны работать через pipe. Один скрипт должен запускать от sudo, так как он работает с COMпортом. Ниже пример кода, который должен вызывать COM.py с sudo.

import subprocess
process = subprocess.Popen(['sudo','python', 'COM.py'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
print process.communicate("password\n")
while True:
	i="Test"
	process.stdin.write('%s\n' % str(i))
	output = process.stdout.readline()
	print output
Вопрос: Как правильно запустить скрипт от sudo?
Спасибо.



Офлайн

#2 Дек. 18, 2013 07:17:51

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Офлайн

#3 Дек. 18, 2013 07:36:47

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

Проблемы с запуском через popen()

Singularity
http://stackoverflow.com/questions/567542/running-a-command-as-a-super-user-from-a-python-script
Пробовал.
Он должен как то запросить пароль от рута или он на автомате от него запускает? После запуска у меня пустые строки и видимо pipe между файлами не установился :(



Офлайн

#4 Дек. 18, 2013 08:29:14

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

Проблемы с запуском через popen()

Проблема была в том что вызывайющий скрипт нужно было вызывать через sudo, то есть:

sudo python name.py



Офлайн

#5 Дек. 18, 2013 08:40:31

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблемы с запуском через popen()

А если тот скрипт, который субпроцессы запускает, его от рута стартануть?



Офлайн

#6 Дек. 18, 2013 18:43:13

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Проблемы с запуском через popen()

А почему на уровне прав доступа к устройству не решить этот вопрос?
Ну или в sudoers можно разрешить запуск конкретной команды без пароля, если очень хочется именно sudo. Или ввод пароля обязательное условие?

p.s. Используйте ключ “-S” для sudo, что бы он читал пароль из stdin, иначе чтение будет из терминала выполняться, эта стандартная политика безопасности для консольного утиля.

..bw



Отредактировано bw (Дек. 18, 2013 18:47:46)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version