如何在PythonAnywhere上将变量打印到Bash控制台?

时间:2016-01-25 07:07:18

标签: python mysql django bash pythonanywhere

我有一个奇怪的问题,我在Django管理员的动作菜单功能中插入我的MySQL数据库的文本正在字符串左侧附加一个'n'字符。这只发生在PythonAnywhere上。我主要在我自己的机器上的本地主机服务器上开发应用程序,并且错误没有显示在那里。

我想知道的主要是如何将变量打印到Bash控制台实例,以便我可以诊断发生了什么。我尝试在动作函数中编写print(word),但输出没有回显到我在我的应用程序运行的虚拟环境(django18)中打开的Bash控制台。在将变量打印到控制台之前,是否还需要执行其他步骤?

或者,如果有人知道为什么'n'将被预先插入到我插入数据库的文本中,这将是非常有用的信息。起初我以为是因为输入变量是unicode文本,但在插入之前将它们编码为utf-8没有区别。

我的行动功能的完整来源如下:

from django.contrib import admin
from django.forms import Textarea
from django.db import models

from .frequency import VocabularyProcess
from .models import School, Grade, Book, Bookmark, Word


# Action menu item
def process_content(modeladmin, request, queryset):
    # Get the text from the database bookmark item
    table = queryset.values_list('id', 'content')
    # Process each record in the queryset
    for record in table:
        bookmark_id = int(record[0])
        content_text = str(record[1].encode('ascii', 'ignore')).lower()
        # make it into a list of lines
        content_list = content_text.splitlines()
        # Process the text into a dictionary of words with counts
        vocabulary_obj = VocabularyProcess(content_list)
        words = vocabulary_obj.get_frequency_dict()
        # Update or create the words and counts in the Words table.
        for word, count in words.items():
            # Encode to utf-8 for compatibility with current DB char encoding
            word = word.encode('utf-8')
            if len(word) <= 20:  # Ensure the word will fit in the DB record
                Word.objects.update_or_create(word=word, \
                           bookmark_id=bookmark_id, defaults={'count': count})

2 个答案:

答案 0 :(得分:3)

print >>sys.stderr, 'message'

然而,正如丹尼尔罗斯曼指出的那样,正确的解决方案是使用Python记录器。这是log.debug()的用途。

答案 1 :(得分:3)

您无法从网络应用程序打印到控制台,它们彼此无法靠近。您可以打印到Web应用程序的日志文件。您发送给stderr的任何输出都将在您的日志中结束。根据您的框架使用日志记录执行的操作,它可能位于您的服务器日志中,也可能位于您的错误日志中。