[英]Python - Print on stdout on a "terminal"
在開始之前,我請大家為這個問題道歉。 也許這很愚蠢,但我找不到解決方案。 我在遠程機器上工作,不知道是什么類型。
我的 python 代碼似乎有效,如下所示。 問題是我試圖在屏幕上打印一些輸出但沒有任何反應。 我已經嘗試過 print 和 raw_input 但沒有任何反應......你知道任何其他方法嗎?
# Set up fields of reply message based on query
def prepareReply():
global authorReply, authorReplyLen, localConvId, originConvId, blbContentAndUntUnz, linkName
print "PLOP!"
raw_input("blabla")
#print "="*10
謝謝 !
import sys
print "Hi!"
sys.stdout.flush()
這是一個大膽的猜測,但查看您評論中的措辭表明它可能是一個 web 服務器應用程序(提示:有關您的環境的更多詳細信息會有所幫助)。 在這種情況下,stdout 可能會轉到其他地方,至少不會轉到瀏覽器。
您實際上是如何運行該代碼的? 您是在 shell 提示符下鍵入“python myprogram.py”,還是在瀏覽器中點擊“重新加載”?
要將 stdout 重定向到您可以閱讀的內容,在本例中為文件:
class PyLogger:
def __init__(self, source):
self.file_handle = open('Python_Log.txt', 'a')
self.source=source
self.buf = []
def write(self, data):
self.buf.append(data)
if data.endswith('\n'):
self.file_handle = open('Python_Log.txt', 'a')
self.file_handle.write('\t' * indent_level)
self.file_handle.write(self.source + "::" + ''.join(self.buf))
self.file_handle.close()
self.buf = []
def __del__(self):
if self.buf != []:
self.file_handle = open('Python_Log.txt', 'a')
self.file_handle.write('\t' * indent_level)
self.file_handle.write(self.source + "::" + ''.join(self.buf) + '\n')
self.file_handle.close()
self.file_handle.close()
import sys
sys.stdout = PyLogger('stdout')
sys.stderr = PyLogger('stderr')
除了 Jori 對 sys.stdin 和 stdout 的重載之外,存儲 stdin 和 stdout 的原始值也是明智的,如下所示:
import sys
savestreams = sys.stdin, sys.stdout
sys.stdout = PyLogger('stdout')
sys.stderr = PyLogger('stderr')
...
...
...
sys.stdin, sys.stdout = savestreams
另一種簡單的方法是:
sys.stdout = sys.__stdout__
sys.stdin = sys.__stdin__
如果您不這樣做,您可能會摸不着頭腦,為什么打印 function 不再向屏幕發送文本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.