У меня есть процесс python, имеющий объект журнала, настроенный для печати журналов в файле журнала.
Теперь я пытаюсь вызвать scala
script через этот python
процесс, используя subprocess
модуль Python.
subprocess.Popen(scala_run_command, stdout=subprocess.PIPE, shell=True)
Проблема в том, что всякий раз, когда процесс python завершается, он зависает с оболочкой, которая оживает только после явной команды stty sane
. Я предполагаю, что это вызвано тем, что scala script выводит в оболочку и, следовательно, оболочка зависает, из-за своего stdout [что-то в его stdout заставляет оболочку терять свою здравомыслие].
По той же причине я хотел попытаться поместить вывод scala run script в мой файл журнала по умолчанию, который, похоже, не выполняется несколькими способами.
Итак, запрос сводится к, как получить вывод stdout
команды оболочки, запущенной через модуль subprocess
в файле журнала. Даже если есть лучший способ достичь этого, а не subprocess, run
, я хотел бы знать идеи.
Текущее состояние кода выглядит следующим образом.
__echo_command = 'echo ":load %s"'
__spark_console_command = 'spark;'
def run_scala_script(self, script):
echo_command = self.__echo_command % script
spark_console_command = self.__spark_console_command
echo_result = subprocess.run(echo_command, stdout=subprocess.PIPE, shell=True)
result = subprocess.run(spark_console_command, stdout=subprocess.PIPE, shell=True, input=echo_result.stdout)
logger.info('Scala script %s completed successfully' % script)
logger.info(result.stdout)