3

在开始之前,我请大家为这个问题道歉。也许这很愚蠢,但我找不到解决方案。我在远程机器上工作,不知道是什么类型。

我的 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

谢谢 !

4

4 回答 4

9
import sys
print "Hi!"
sys.stdout.flush()
于 2009-06-16T09:32:10.580 回答
2

这是一个疯狂的猜测,但查看您评论中的措辞表明它可能是一个 Web 服务器应用程序(提示:有关您的环境的更多详细信息会有所帮助)。在这种情况下,stdout 可能会转到其他地方,至少不会转到浏览器。

您实际上是如何运行该代码的?您是在 shell 提示符下键入“python myprogram.py”,还是在浏览器中点击重新加载?

于 2009-06-16T09:22:58.243 回答
2

要将标准输出重定向到您可以阅读的内容,在这种情况下是一个文件:

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')
于 2009-06-16T09:27:56.923 回答
-1

除了 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__

如果您不这样做,您可能会摸不着头脑,为什么您的打印功能不再向屏幕发送文本。

于 2019-09-19T16:21:30.283 回答