2015-01-26 1 views
0

, например, я запустить скриптPython получить вывод сценария с теперь только PID файла

os.execv('script.py',('',)) 

Как я прочитал в документации эта команда запускает скрипт из текущего сценария, принимая его PID и reasigning его для запуска script.py. Поэтому я могу получить pid процесса. Вопрос следующий: После запуска execv мне нужно получить стандартный вывод этого скрипта, и единственное, что я знаю, это pid процесса. Можно ли выполнить это с помощью python? Какие-либо предложения ? Мне нужно использовать только execv()

ответ

0

Другим возможным решением перенаправляет вывод в файл.

import os,sys 
sys.stdout = open("./data.out","w") 
os.dup2(sys.stdout.fileno(), 1) 
os.execv('/usr/bin/python', ['python', './script.py']) 
+0

Отлично, вот что я говорил. Спасибо –

+0

Но можете ли вы, пожалуйста, также помочь сделать это небуферизирующим? так что вывод execv не собирает буфер, а сразу помещает данные в файл? –

+0

@ user3581394 да выход файл – aberna

0

os.execv просто привязывается к системному вызову execve. Вещь, что вам нужно, это subprocess модуль:

import sys 
import subprocess 

proc = subprocess.Popen([sys.executable, 'script.py'], 
         stdout = subprocess.PIPE) 
proc.wait() 
print(proc.stdout.read()) 

См https://docs.python.org/2/library/subprocess.html

+0

Но подпроцесс создает дочерний процесс, который может привести к процессу зомби. Поэтому я не могу использовать модуль подпроцесса –

+0

proc.wait() гарантирует, что вы не получите зомби. Вы можете добавить его, чтобы окончательно заблокировать. os.execv() полностью заменяет ваше изображение, что означает, что после его вызова ваш текущий скрипт мертв, существует только сценарий «script.py» – myaut

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