Программы на Python
-
Anonymous
Запустите подпроцесс и распечатайте вывод в журнал.
Сообщение
Anonymous »
Я ищу способ вызова сценариев оболочки из Python и записи их stdout и stderr в файл с использованием ведения журнала. Вот мой код:
Код: Выделить всё
import logging
import tempfile
import shlex
import os
def run_shell_command(command_line):
command_line_args = shlex.split(command_line)
logging.info('Subprocess: \"' + command_line + '\"')
process_succeeded = True
try:
process_output_filename = tempfile.mktemp(suffix = 'subprocess_tmp_file_')
process_output = open(process_output_filename, 'w')
command_line_process = subprocess.Popen(command_line_args,\
stdout = process_output,\
stderr = process_output)
command_line_process.wait()
process_output.close()
process_output = open(process_output_filename, 'r')
log_subprocess_output(process_output)
process_output.close()
os.remove(process_output_filename)
except:
exception = sys.exc_info()[1]
logging.info('Exception occured: ' + str(exception))
process_succeeded = False
if process_succeeded:
logging.info('Subprocess finished')
else:
logging.info('Subprocess failed')
return process_succeeded
И я уверен, что есть способ сделать это без создания временного файла для хранения выходных данных процесса. Есть идеи?
Подробнее здесь:
https://stackoverflow.com/questions/219 ... to-logging
1763480997
Anonymous
Я ищу способ вызова сценариев оболочки из Python и записи их stdout и stderr в файл с использованием ведения журнала. Вот мой код:
[code]import logging
import tempfile
import shlex
import os
def run_shell_command(command_line):
command_line_args = shlex.split(command_line)
logging.info('Subprocess: \"' + command_line + '\"')
process_succeeded = True
try:
process_output_filename = tempfile.mktemp(suffix = 'subprocess_tmp_file_')
process_output = open(process_output_filename, 'w')
command_line_process = subprocess.Popen(command_line_args,\
stdout = process_output,\
stderr = process_output)
command_line_process.wait()
process_output.close()
process_output = open(process_output_filename, 'r')
log_subprocess_output(process_output)
process_output.close()
os.remove(process_output_filename)
except:
exception = sys.exc_info()[1]
logging.info('Exception occured: ' + str(exception))
process_succeeded = False
if process_succeeded:
logging.info('Subprocess finished')
else:
logging.info('Subprocess failed')
return process_succeeded
[/code]
И я уверен, что есть способ сделать это без создания временного файла для хранения выходных данных процесса. Есть идеи?
Подробнее здесь: [url]https://stackoverflow.com/questions/21953835/run-subprocess-and-print-output-to-logging[/url]