2015-09-17 7 views
2

Я создаю скрипт python (start.py) для запуска нескольких (4) скриптов python. Мой код:Выполнение скрипта Python без создания нового процесса с подпроцессом

import subprocess 
from time import sleep 

y=(0.2) 
sleep (y) 
subprocess.Popen(["python", 'a1.py']) 
sleep (y) 
subprocess.Popen(["python", 'a2.py']) 
sleep (y) 
subprocess.Popen(["python", 'a3.py']) 
sleep (y) 
subprocess.Popen(["python", 'a4.py']) 

Когда я бегу start.py четыре сценарии выполняются в фоновом режиме, как я ожидал, но каждый из них с идентификатором процесса. Возможно ли иметь один PID для всех?

И как я могу сделать start.py при запуске в качестве сервиса? (я использую малиновый пи).

+1

есть причина для запуска сценариев как подпроцессы вместо просто [импортировать их и запускать соответствующие функции] (http://stackoverflow.com/q/30076185/4279)? – jfs

+0

Исправьте свой отступ кода. Это всего лишь 4 пробела, поэтому мое редактирование не может пройти мимо фильтра дерьма. –

+0

Действительно старый школьный способ - написать каждый скрипт так, чтобы он «execve()» следующий, а в главном скрипте начинался с 'execve()' ing the first;) Таким образом вы просто заменяете процессы, так что это одно и то же PID во всем. –

ответ

3

Чтобы запустить встроенный Python скрипт в пределах одного интерпретатора можно использовать execfile:

https://docs.python.org/2/library/functions.html#execfile

Python 3 эквивалент:

What is an alternative to execfile in Python 3?

Чтобы запустить скрипт в качестве фонового сервиса это для этой цели лучше использовать внешний инструмент, например Linux systemd или supervisord.

-2

вы можете попробовать этот код:

import subprocess 
from time import sleep 
import sys 
y=(0.2) 
sleep(y) 
subprocess.Popen([sys.executable, 'a1.py'],stdin=subprocess.PIPE) 
sleep(y) 
subprocess.Popen([sys.executable, 'a2.py'],stdin=subprocess.PIPE) 
sleep(y) 
subprocess.Popen([sys.executable, 'a3.py'],stdin=subprocess.PIPE) 
sleep(y) 
subprocess.Popen([sys.executable, 'a4.py'],stdin=subprocess.PIPE) 

я recommaned выполнить скрипт один на один, если все думают хорошо, то вы можете выполнить над программой

+2

** (1) ** каждый 'Popen()' порождает новый процесс, т. Е. Ваш код противоречит заголовку вопроса ** (2) **, если вы хотите дождаться завершения каждого сценария, используйте 'subprocess .check_call() 'для запуска. ** (3) ** вы должны [рассмотреть возможность импорта соответствующих модулей вместо их выполнения.] (Http://stackoverflow.com/questions/32628433/executing-a-python-script-without-spawning-a-new- процесс-с-подпроцесса # comment53110640_32628433) – jfs

Смежные вопросы