[英]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.