2011-04-06 69 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?