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はおそらく他の場所に移動しますが、少なくともブラウザには移動しません。

そのコードを実際にどのように実行していますか?シェルプロンプトで「pythonmyprogram.py」と入力しますか、それともブラウザで[再読み込み]をクリックしますか?

于 2009-06-16T09:22:58.243 に答える
2

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')
于 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

もう1つの簡単な方法は次のとおりです。

sys.stdout = sys.__stdout__
sys.stdin = sys.__stdin__

これを行わないと、印刷機能が画面にテキストを送信しなくなった理由について頭を悩ませることに気付くかもしれません。

于 2019-09-19T16:21:30.283 に答える