Форум сайта python.su
0
Здравствуйте,
Есть shell скрипт в котором перезагружаются/останавливаются/запускаются службы FreeBSD
так вот если запускать этот скрипт просто из консоли, - он отрабатывает нормально (за секунды три)
но если сделать тот же запуск из питона:
subprocess.Popen(['script.sh'], shell=True)
Отредактировано (Март 14, 2011 17:21:23)
Офлайн
0
proc = subprocess.Popen(['script.sh'], shell=True, executable='/bin/bash')
proc.wait()
Офлайн
0
Хм, а разве при использовании параметра shell = True питон не станет запускать это в шелле по умолчанию (для FreeBSD это /bin/sh) и нужно явное указание?
Не на чем сейчас проверить, завтра на работе проверю, - отпишусь
Отредактировано (Март 14, 2011 21:31:57)
Офлайн
0
Ничего не изменилось, эффект тот же.
Added:
Не думал что вообще есть разница: на самом деле скрипт вызывающий команду, запущен как сервер.
А если сделать так:
Cервер пишет в файл команду.
Другой демон, раз в 1 сек проверяет если там что то. И если есть - то выполняет и очищает файл.
- Так работает нормально, но это какое то костыльное решение.
Буду думать дальше..
Отредактировано (Март 15, 2011 04:58:46)
Офлайн
32
на крайний случай можно os.system() попробовать
Офлайн
20
Может так правильнее?
import subprocess
process = subprocess.Popen(['script.sh'], shell = True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
process.stdout.read()
# Python 2.6.6
# subprocess.py:1030
# ...
if shell:
args = ["/bin/sh", "-c"] + args
if executable:
args[0] = executable
# ...
Офлайн
0
o7412369815963
Пробовал, без разницы в принципе.
bw
А почему в данном случае так должно быть правильнее?
Это же зависит от задачи куда мне нужно перенаправлять потоки, и нужно ли видеть stderr.
А вообще я собирал и strdout и stderr, в том то и дело что ошибок нет видимых, на определённом шаге команда просто подвисает. В логе демона (mpd5, - который останавливается, - тоже нет ошибок)
PS: А насчёт того что бы читать первоисточник, согласен конечно, надо посмотреть что там как
Офлайн
32
а если попробовать в Popen подставить окружение которое пришло из вне?: env = os.environ
Офлайн
0
И так тоже не помогает. И что характерно что проблема только с остановкой служб. С запуском проблем нет.
Офлайн