获取已打印内容的文本内容python

时间:2016-03-03 17:31:39

标签: python algorithm stdout

让我说我打印以下代码

print("""
THE RUSSIAN PEASANT ALGORITHM
-----------------------------
times two values x and y together


""")

x=int(raw_input("raw_input x: "))
y=int(raw_input("raw_input y: "))

print("x"+" "*(10)+"y")

while x!=1:
      x=x/2
      y=y*2

      print(str(x)+" "*10+str(y))

这会打印算法的结果,与用户输入的数字相对应。如果我希望得到一个包含所有输出到python控制台的变量,我该如何处理呢?

编辑:为了澄清我想要输出的原因,如果是这样基本上我可以用“CLS”清除屏幕并重新打印我已经打印的所有内容,但是你应该用俄语划掉偶数x值农民算法。

4 个答案:

答案 0 :(得分:1)

所有关于将 @Override public void run() { if (isVisible()) { getActivity().runOnUiThread(new Runnable() { public void run() { // stuff to do } }); } } 重新定义为一些内存流。

您可以使用stdout打印。请参阅python2 docs - Reading and writing strings as filepython3 docs - Core tools for working with streams

使用该字符串做什么,甚至用常规string打印。

代码 Python2

print

代码Python3:

import sys
import StringIO
old_stdout = sys.stdout # Memorize the default stdout stream
sys.stdout = buffer = StringIO.StringIO()

print('123')
a = 'HeLLo WorLd!'
print(a)
# Call your algorithm function.
# etc...

sys.stdout = old_stdout # Put the old stream back in place

whatWasPrinted = buffer.getvalue() # Return a str containing the entire contents of the   buffer.
print(whatWasPrinted) # Why not to print it?
buffer.close()

import sys import io old_stdout = sys.stdout # Memorize the default stdout stream sys.stdout = buffer = io.StringIO() print('123') a = 'HeLLo WorLd!' print(a) # Call your algorithm function. # etc... sys.stdout = old_stdout # Put the old stream back in place whatWasPrinted = buffer.getvalue() # Return a str containing the entire contents of the buffer. print(whatWasPrinted) # Why not to print it? print(123) 然后可以更改,打印到常规标准输出等。

答案 1 :(得分:0)

你似乎想要的是输出,如果我们使用tempfile对Tee实现here做一个小调整,你可以写入TemporaryFile,然后从中得到输出:

import sys
from tempfile import TemporaryFile

class Tee(object):
    def __init__(self):
        self.file = TemporaryFile()
        self.stdout = sys.stdout
        sys.stdout = self

    def __del__(self):
        sys.stdout = self.stdout
        self.file.close()

    def write(self, data):
        self.file.write(data)
        self.file.write(data.rstrip()+"\n")
        self.stdout.flush()
t = Tee()
print("""
THE RUSSIAN PEASANT ALGORITHM
-----------------------------
times two values x and y together


""")

x = int(raw_input("raw_input x: "))
y = int(raw_input("raw_input y: "))    
print("x" + " " * (10) + "y")   
while x != 1:
    x = x / 2
    y = y * 2  
    print(str(x) + " " * 10 + str(y))   
t.file.seek(0)
print(t.file.read())

答案 2 :(得分:0)

您可以通过写入文本文件来完成此操作:

sys.stdout = open("test.txt", "w")

##    Your Code    ##
    
sys.stdout.close()

如果您的程序需要它,则可以从文本文件中读取。

printed_text=open("test.txt", "r").readlines()

答案 3 :(得分:-1)

我不确定你为什么要这样做,所以这可能对你没有帮助,但是可以通过从另一个脚本执行你的脚本来在控制台中打印所有值。

在新文件中:

import subprocess
linetorun = ["python", "yourscript.py"]
proc= subprocess.Popen(linetorun,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
printedtoconsole,errormessage=proc.communicate()
with open("output.txt","w+") as outfile:
    f.write(x)

应该做的伎俩。 communication()与Popen中设置的选项将为您提供控制台输出。 这可能需要对unix进行一些调整。