运行 子 python 脚本和显示输出(打印和函数内显示)和访问来自子的变量

Run a child python script and both display output (print and within-function displays) and access variables from child

我有两个文件:parent.py 和 child.py。我希望将父脚本用于 运行 子脚本,但我希望子脚本中的显示出现在控制台 window 中。示例文件如下:

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 选项应该根据需要显示输出,但事实并非如此。 (这来自对我的问题 Consecutively execute multiple python scripts 的评论回复,我想在这里以更清晰的方式提问)。

父文件和子文件都位于同一个工作目录中,我使用的是 Spyder(不确定这是否重要)。我看到是什么让我认为子文件是 运行ning In: runfile('C:/.../parent.py', wdir='C:/.../testing'),但我既没有看到 print() 命令,也没有看到控制台中显示的优化命令的显示。一旦我有了 运行 父变量,我也无法访问子变量。

如何查看输出(来自 print() 和 optimize(.,disp=True) 命令),以及如何在 运行 连接父脚本时访问子脚本中的变量?

看起来答案是在父文件中使用以下代码行:

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

这会按需要运行文件,允许访问子文件创建的变量,并显示所有需要的输出。

为了给予应有的信任,我发现了此处描述的语法:What is an alternative to execfile in Python 3?,这解释了我之前尝试使用 exec() 不正确的原因。

也许其他人可以通过包含那些担心与 exec() 相关的不安全因素的替代方案来改进答案。