2011-04-06 71 views
4

运行/调试Django的manage.py每当我试着调试Django的manage.py从Eclipse中,我得到:无法从日食

pydev debugger: warning: psyco not available for speedups (the debugger will still work correctly, but a bit slower) 
pydev debugger: starting 
Traceback (most recent call last): 
    File "/proj/virtualenvs/testing/infocards/manage.py", line 15, in <module> 
    execute_manager(settings) 
    File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager 
    utility.execute() 
    File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/__init__.py", line 379, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/base.py", line 191, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/base.py", line 220, in execute 
    output = self.handle(*args, **options) 
    File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/commands/runserver.py", line 67, in handle 
    self.run(*args, **options) 
    File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/commands/runserver.py", line 76, in run 
    autoreload.main(self.inner_run, args, options) 
    File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/utils/autoreload.py", line 131, in main 
    reloader(main_func, args, kwargs) 
    File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/utils/autoreload.py", line 104, in python_reloader 
    reloader_thread() 
    File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/utils/autoreload.py", line 83, in reloader_thread 
    ensure_echo_on() 
    File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/utils/autoreload.py", line 77, in ensure_echo_on 
    attr_list = termios.tcgetattr(fd) 
termios.error: (22, 'Invalid argument') 
Validating models... 

运行python manage.py runserver在命令行中工作正常。

谷歌搜索我发现termios.error: (22, 'Invalid argument')错误是因为python试图从标准输入读取,但不能从Eclipse环境内部读取。

[编辑]:我忘了提及我正在运行PyDev和Django的最新1.3版本。

[编辑]:@Blake,@izhak。我在Eclipse中定义了包含在我的virtualenv中的Python(/ proj/virtualenvs/testing,就像你从输出中看到的一样)。在命令行中,我使用与激活virtualenv相同的Python版本。

回答

3

似乎缺少--noreload会导致此效果。奇怪的。

编辑:首先我认为这是该项目的工作目录。

+0

谢谢。 添加 - 无负载修复了这个问题。我只需要记住在任何代码更改时重新启动服务器。 – stratosgear 2011-04-08 20:05:47

+0

如果您曾经找到避免'--noreload'的解决方案,而不是从命令行运行所有内容,请告诉我。 – julkiewicz 2011-04-08 20:24:03

+0

为了让自动重载工作,请查看:http://djangosnippets.org/snippets/1561/然而,在粘贴这段代码并删除'--noreload'后,它仍然不起作用。如果我按原样离开了'--noreload',我仍然得到这个错误:/ Django 1.3。 – 2011-06-15 13:30:43

0

您是否尝试过为Eclipse安装PyDev插件? Eclipse用户开发Python应用程序,尤其是Django应用程序非常容易。只需创建新的Django项目,您将获得良好配置的环境和manage.py,可用于从项目上下文菜单运行。

+0

是的,当然我已经安装的PyDev。无论是将我的调试配置定义为“PyDev Django”配置还是“Python运行”配置,我都会得到同样的错误... – stratosgear 2011-04-06 21:24:10

0

您的系统中是否有多个版本的Python?如果从终端打开的版本与PyDev解释器使用的版本不同,则可能会导致操作环境出现问题/差异。

0

你可以检查Eclipse> Windows>首选项> Pydev> Python的python版本使用。给你在那里使用的确切的Python版本。

1

我有确切同样的错误,当我试图从Eclipse简单地运行一个django程序。如果我右键单击该项目,然后选择Django - > Custom Command和'runserver',则会失败。我终于发现,通过点击Eclipse工具栏上的运行按钮,它可以工作。尽管如此,我发现它并不总是一件确定的事情。我正在运行最新的PyDev 2.0。和你一样,从eclipse之外的命令行运行它每次都是如此。

2

花3个多小时找出这个问题。 基本上罪魁祸首是与django 1.3的autoload.py文件。基本上Eclipse的stdin不是tty类型的设备。破解这个问题是修改/your-path-to-django/util/autoreload.py这样的:

index e5a421e..1a4a1a1 100644 
--- a/autoreload_bak.py 
+++ b/usr/local/lib/python2.6/dist-packages/django/utils/autoreload.py 
@@ -73,11 +73,12 @@ def code_changed(): 

def ensure_echo_on(): 
    if termios: 
-  fd = sys.stdin.fileno() 
-  attr_list = termios.tcgetattr(fd) 
-  if not attr_list[3] & termios.ECHO: 
-   attr_list[3] |= termios.ECHO 
-   termios.tcsetattr(fd, termios.TCSANOW, attr_list) 
+  if sys.stdin.isatty(): 
+   fd = sys.stdin.fileno() 
+   attr_list = termios.tcgetattr(fd) 
+   if not attr_list[3] & termios.ECHO: 
+    attr_list[3] |= termios.ECHO 
+    termios.tcsetattr(fd, termios.TCSANOW, attr_list) 

def reloader_thread(): 
    ensure_echo_on() 

这应该让你即使没有--noreload选项的runserver在Eclipse中运行。

注意:您仍然需要为了适用该补丁摆脱父/子进程的问题,在这里看到: How to enable Eclipse debugging features in a web application?