Запустите дочерний скрипт на python, и выведите на экран вывод (вывод на печать и внутри функции) и получите доступ к переменным из дочернего процесса - PullRequest
0 голосов
/ 06 марта 2019

У меня есть два файла: parent.py и child.py.Я хочу использовать родительский для запуска дочернего сценария, но я хочу, чтобы отображения в дочернем сценарии отображались в окне консоли.Ниже приведены примеры файлов:

child.py:

from scipy import optimize
x0=1

def f(x):
    return x**2

res = optimize.fmin(f, x0, disp=True)

print('print printed')

parent.py:

import subprocess
subprocess.run(["python", "child.py"], capture_output=True)

Насколько я понимаю, опция capture_output должна отображать выводпо желанию, но это не так.(Это следует из комментария на мой вопрос Последовательное выполнение нескольких скриптов Python , которые я пытаюсь задать здесь более понятным способом).

И родительские, и дочерние файлы расположены в одном и том жерабочий каталог, и я использую Spyder (не уверен, если это имеет значение).Я вижу, что заставляет меня думать, что дочерний файл работает In: runfile('C:/.../parent.py', wdir='C:/.../testing'), но я не вижу ни команды print (), ни отображения из команды оптимизации, отображаемой в моей консоли.У меня также нет доступа к дочерним переменным после запуска родителя.

Как просмотреть выходные данные (из команд print () и optimize (., Disp = True)), а также доступпеременные в дочернем скрипте при запуске родителя?

1 Ответ

0 голосов
/ 08 марта 2019

Похоже, что ответом является использование следующей строки кода в родительском файле:

exec(open('child.py').read())

Это запускает файл по желанию, позволяет получить доступ к переменным, созданным дочерним файлом, и отображаетвсе желаемые результаты.

Чтобы отдать должное должному, я нашел синтаксис, описанный здесь: Что является альтернативой execfile в Python 3? , и это объясняет причину моих предыдущих попыток использования exec() были неверны.

Возможно, другие могут улучшить ответ, включив альтернативы тем, кто обеспокоен ненадежностью, связанной с exec ().

...