如何将 sys.stdout.write 的结果存储在 Python 中的全局变量中



如何使用sys.stdout.write(output)的结果作为全局变量。 以下是代码的一部分。 sys.stdout.write 的输出是单词,它会一直追加,直到完成 140 个字符。

for i in range(140):
x = numpy.reshape(pattern, (1, len(pattern), 1))
x = x / float(num_vocab)
pred = model.predict(x, verbose=0)
index = numpy.argmax(pred)
output = int_to_char[index]
#print('Output',output)
OutputTweet.append(output)
seq_in = [int_to_char[value] for value in pattern]
sys.stdout.write(output)
sys.stdout.flush()
pattern.append(index)
pattern = pattern[1:len(pattern)]

sys.stdout.write的结果不是很有用——它只是你写的任何内容的字符数。当然,您可以将其存储在全局变量中:

written = 0
def myfunc():
global written
written += sys.stdout.write(blahblah)

。但我不明白你为什么要这样做。


sys.stdout.write写入终端的内容(或重定向文件或其他文件)似乎更有用。但你已经有了。您正在执行此操作:

sys.stdout.write(output)

因此,它所写的内容将正是output中的内容。所以只要存储它。例如:

outputs = []
def myfunc():
global outputs
output = blah blah blah
sys.stdout.write(output)
outputs.append(output)

现在,如果你无法控制正在编写东西的函数,因为它在某个不允许修改的库中或其他东西,你可以捕获它的输出。这通常不是一个好主意,但如果需要,您可以围绕实际sys.stdout编写一个包装器,以保存输出,然后将其传递给真实的东西(或者不希望,如果您不希望它击中屏幕),然后只需分配sys.stdout = mywrapper。但是,如果你不知道怎么写,你几乎肯定不想。

最新更新