【问题标题】:capturing output in a variable in python在python中的变量中捕获输出
【发布时间】:2020-02-02 10:45:32
【问题描述】:

这是一个愚蠢的问题,但它给我带来了很多麻烦。 我正在尝试将输出捕获到变量中

a='jobid'
p=exec(a)
print(p)
output:None

你们可能会说为什么不直接使用变量 'a' 而不是执行它,但我旁边有一个级联函数。而且我不能使用变量'a'。变量中的值'job ID' 'a' 来自数据框并需要捕获值,因为 'job ID' 是我的代码中的一个参数。谁能帮帮我?

我也试过下面的代码:

a='jobid'
p=exec('print(jobid)')
print(p)

但它没有成功。

【问题讨论】:

  • exec() 不返回任何内容。因此p=exec(a) ;print(p) 将打印None
  • 不仅exec 不返回任何东西,print 也不返回任何东西,所以我很困惑你期望p 是什么
  • 你大概想use subprocess

标签: python pandas dataframe variables output


【解决方案1】:

您可以重定向sys.stdout 并使用StringIO 对象来捕获值:

import sys
from io import StringIO

something = lambda:print('I have been run')
old_stdout = sys.stdout
sys.stdout = catcher = StringIO()
exec('something()')
sys.stdout = old_stdout
print(catcher.get_value())

或者,为了安全起见,您可以使用contextlib.redirect_stdout 来做同样的事情:

from contextlib import redirect_stdout
catcher = StringIO()
with redirect_stdout(catcher):
     exec('something()')
print(catcher.getvalue())

【讨论】:

    【解决方案2】:

    希望对你有所帮助。

    尝试以下方法:

    b='a="jobid"\nprint(a)'
    exec(b)
    

    【讨论】:

      猜你喜欢
      • 2021-09-27
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      • 2011-12-31
      • 2022-01-15
      相关资源
      最近更新 更多