我有一个奇怪的问题,我在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})
答案 0 :(得分:3)
print >>sys.stderr, 'message'
然而,正如丹尼尔罗斯曼指出的那样,正确的解决方案是使用Python记录器。这是log.debug()
的用途。
答案 1 :(得分:3)
您无法从网络应用程序打印到控制台,它们彼此无法靠近。您可以打印到Web应用程序的日志文件。您发送给stderr的任何输出都将在您的日志中结束。根据您的框架使用日志记录执行的操作,它可能位于您的服务器日志中,也可能位于您的错误日志中。