【问题标题】:Run a child python script and both display output (print and within-function displays) and access variables from child运行子 python 脚本并显示输出(打印和函数内显示)并从子访问变量
【发布时间】:2019-07-28 15:10:13
【问题描述】:

我有两个文件: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')

父.py:

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

我的理解是capture_output 选项应该根据需要显示输出,但情况似乎并非如此。 (这来自对我的问题Consecutively execute multiple python scripts 的评论回复,我想在这里以更清晰的方式提出)。

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

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

【问题讨论】:

  • 您希望子脚本的输出显示还是捕获以供父脚本使用? (请注意,您不能同时进行这两项操作;您可以做的最好的事情是捕获并重新显示,如果需要,可能是实时的。)
  • 如果我不能同时做这两件事,我会偏好显示(这样我就可以看到优化是否挂在其中一个子脚本中)。但是,听起来您选择实时捕获和重新显示输出是最佳选择。

标签: python parent-child


【解决方案1】:

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

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

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

为了在应得的地方给予赞扬,我找到了这里描述的语法:What is an alternative to execfile in Python 3?,这解释了我之前尝试使用 exec() 不正确的原因。

也许其他人可以通过提供替代方案来替代那些担心与 exec() 相关的不安全性的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多