Python:将打印输出分配给变量

Wil*_*son 22 python unix variables function

我想知道如何将print函数(或任何函数)的输出分配给变量.举个例子:

import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
Run Code Online (Sandbox Code Playgroud)

如何将输出分配给print tag.getArtist变量?

Sve*_*ach 24

printPython中的语句将其参数转换为字符串,并将这些字符串输出到stdout.要将字符串保存到变量,只需将其转换为字符串:

a = str(tag.getArtist())
Run Code Online (Sandbox Code Playgroud)

  • OP并没有询问如何将一个字符串保存到另一个字符串,而是询问如何保存打印语句的输出。这个答案没有解决问题。 (3认同)
  • 如果 tag.getArtist() 的值包含非 ascii 字符,例如 `u'Elys\xe9e'`,这将不起作用。打印语句将显示 Elysée,但 str() 将抛出 UnicodeEncodeError。 (2认同)
  • @RCross 在Python 2中,这确实是真的——Unicode字符串在打印时将使用“sys.stdout.encoding”进行编码。因此,您需要使用 `u'Elys\xe9e'.encode(sys.stdout.encoding)` 来获得与 `print` 所做的等效操作。在 Python 3 中你应该很少会看到这个问题,因为 Python 3 中的 `str` 是 Unicode 字符串类型,所以 `str(u'Elys\xe9e')` 将使字符串保持不变。 (2认同)

Arc*_*yno 20

更笼统地回答这个问题 how to redirect standard output to a variable ?

请执行下列操作 :

from io import StringIO
import sys

result = StringIO()
sys.stdout = result
result_string = result.getvalue()
Run Code Online (Sandbox Code Playgroud)

如果您只需要在某些功能中执行此操作,请执行以下操作:

old_stdout = sys.stdout  

# your function containing the previous lines
my_function()

sys.stdout = old_stdout
Run Code Online (Sandbox Code Playgroud)


slu*_*uki 12

您可以使用参数file来重定向print函数的输出

from io import StringIO

s = StringIO()
print(42, file=s)
result = s.getvalue()
Run Code Online (Sandbox Code Playgroud)


Szy*_*zyk 7

或许你需要的一个 str,reprunicode功能

somevar = str(tag.getArtist())
Run Code Online (Sandbox Code Playgroud)

取决于你使用的是哪个python shell