2009-06-16 2 views
3

Перед тем, как начать, я прошу вас всех извиниться за вопрос. Может быть, это глупо, но я не могу найти решение. Я работаю на удаленной машине и понятия не имею, какой тип.Python - Печать на stdout на терминале

Мой код на питоне, который, кажется, работает, приведен ниже. Проблема в том, что я пытаюсь напечатать некоторые выходы на экране, но ничего не происходит. Я пробовал как 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 

Спасибо!

+0

печати печатает на стандартный вывод - проблема должна быть где-то в другом месте. Какую версию python вы используете? –

+0

2.4 Возможно ли, что stdout переопределяется где-то еще по умолчанию? – wheisenberg

+0

Можно перенаправить stdout, но я не думаю, что это сделано по умолчанию. Я использовал перенаправление для входа в файл в обстоятельствах, когда у меня не было доступа к stdout. –

ответ

4

Чтобы перенаправить стандартный вывод на то, что вы можете прочитать, файл в этом случае:

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') 
+0

Похоже, что первые функции open() и close() в write() и __del __() являются излишними. Или вы хотите сделать self.file_handle.flush()? Плюс, file_handle действительно может быть атрибутом класса вместо атрибута экземпляра, поскольку он является общим для всех экземпляров. – EOL

+0

Это простая копия-копия какого-то «кода, который работает», о котором я не думал давно, возможно, изначально где-то в Интернете. Вы вполне можете быть правы, так как большая часть кода является излишней. –

2

Это дикая догадка, но, глядя на формулировку в ваших комментариях, это означает, что это может быть приложение веб-сервера (подсказка: более подробная информация о вашей среде была бы полезной). В этом случае stdout, вероятно, собирается куда-то еще, по крайней мере, не в браузер.

Как вы действительно используете этот код? Вы вводите «python myprogram.py» в командной строке, или вы нажимаете «Обновить» в своем браузере?

+0

приложение работает на сервере, но не на веб-сервере! Это конкретный сервер, обрабатывающий транзакции ... Для запуска программы python мне нужно запустить сценарий оболочки, который запускает мое приложение python! Я понятия не имею, что сценарий оболочки выполнен ... – wheisenberg

+1

Ну, похоже, что вы уже делаете то, что можно ожидать с точки зрения Python. Поскольку ваш скрипт запускается через другую структуру, о которой никто из нас ничего не знает, stdout можно перенаправить куда угодно. Одна вещь, которую вы могли бы попробовать: out = open ("/ dev/tty", "w"); print >> out, «hello world» –

+1

Если он работает по какому-то чертежу, возможно, «возвратит» PLOP! »' будет работать? – uolot

Смежные вопросы