【问题标题】:How to get execution of python print statements as a string? [duplicate]如何将 python 打印语句作为字符串执行? [复制]
【发布时间】:2016-09-13 01:16:52
【问题描述】:

我正在编写一个 python 脚本,其中包含一个包含 python 打印语句作为字符串的列表。在我的函数中,我使用 for 循环来运行 exec 函数来运行这些语句。

这是我的功能:

g_list = ["print('Wow!')\n", "print('Great!')\n", "print('Epic!')\n"]

def run_statements():
    for item in g_list:
        exec(item)

当我运行run_statements() 函数时,我得到以下输出:

Wow! 
Great! 
Epic!

基本上,我想将输出保存为字符串,以便以后可以将其保存到我的数据库中。

有人知道我该怎么做吗?

编辑:在以下问题上:python: get the print output in an exec statement 他正在尝试获取输出,我的问题与我试图以字符串形式获取输出的方式不同

【问题讨论】:

  • print 的重点是将文本发送到某处,而不是将其保存在内存中。如果你想把它保存为一个字符串,你应该简单地这样做,然后在适当的时候打印它。此外,对于您要实现的任何目标,exec 很可能是错误的方法。
  • 您能否给出您期望的最终结果的准确样本输出?你说的是字符串. So you want: "哇!\n太棒了!\n史诗\n"`?
  • @idjaw 是的!这正是我想要的
  • @idjaw 这样会给出语法错误
  • @Elisha512 查看发布的副本。

标签: python exec


【解决方案1】:

如果您确实需要在字符串列表中使用 print 语句(与另一个答案中建议的具有不同名称的类似打印的函数相反),您可以将名称 print 重新分配给您自己的函数,经过仔细,小心,小心保存旧的打印功能,以便您可以小心,小心,小心地将名称print恢复到正确的定义。像这样:

>>> g_list = ["print('Wow!')\n", "print('Great!')\n", "print('Epic!')\n"]
>>> old_print = print
>>> def print(s): # redefining the built-in print function! terrible idea
...   global catstr
...   catstr += s
...
>>> catstr = ""
>>> for s in g_list: exec(s)
...
>>> catstr
'Wow!Great!Epic!'
>>> print = old_print # Don't forget this step!

这是完全不道德的,我没有建议你这样做。我只说你可以做到。

强调这个计划的不可取性:exec 应该很少使用;有危险;应该很少将内置函数的名称重新分配给不同的函数;有危险。在同一个代码中执行这两项操作可能真的会毁了你的一天,尤其是在维护程序员“只是一点点”编辑你的代码而没有意识到潜在影响之后。

【讨论】:

  • 谢谢@D-Von 我理解它的危险,但它可能正是我正在寻找的东西。我将对其进行测试,如果工作正常,将其标记为正确
  • 这个语句给出错误:old_print = print that invalid syntax
  • 您使用的是 Python 3.x 吗?那就是我运行代码的地方。它不适用于 Python 2.x,其中 print 是内置命令,而不是函数。
  • 你有没有针对python 2的解决方案。我使用的是python 2.7.11
  • 它在 python 3 中完全正确。我已经检查过,但是当我将它包含在函数中时它不起作用。我已将其添加为此答案的更新。你能查一下吗?
【解决方案2】:

如果要保存打印的内容,可以创建自定义命令,并将输出保存到变量中。例如

output_bin = ""

def printsave(string):
    print string
    if len(string) > 1:
        if string[-2] == "\n":
            output_bin = output_bin + string
        else:
            output_bin = output_bin + string + "\n"
    else:
        output_bin = output_bin + string + "\n

然后,无论何时调用printsave(),它都会保存到字符串output_bin。如果您希望将其保存到数组中...

output_bin = []

def printsave(string):
    print string
    if len(string) > 1:
        if string[-2] == "\n":
            output_bin.append(string)
        else:
            output_bin.append(string + "\n")
    else:
        output_bin.append(string + "\n)

【讨论】:

  • 这不是有效的 Python 语法。这是不正确的。
  • @idjaw 抱歉,我根本没有测试它。 ://
  • @idjaw 我做错了什么?如果你愿意告诉我。
  • 您不能在 Python 中使用连字符。我强烈建议测试代码以确保它是一个可行的解决方案,以免误导 OP 走上可能无法正常工作的代码路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多