1''*_*1'' 6 python google-app-engine visual-studio webapp2 ptvs
我可以使用Python工具for Visual Studio 2012 运行我的Google App Engine webapp2应用程序,无需遵循本教程,甚至单步执行服务器初始化代码,但是我无法在获取或发布方法时使用它来解决问题.网站已加载,类似于此视频中显示的main()方法.当我暂停调试器时,它总是在wsgi_server.py中的以下无限循环中结束:
def _loop_forever(self):
while True:
self._select()
def _select(self):
with self._lock:
fds = self._file_descriptors
fd_to_callback = self._file_descriptor_to_callback
if fds:
if _HAS_POLL:
# With 100 file descriptors, it is approximately 5x slower to
# recreate and reinitialize the Poll object on every call to _select
# rather reuse one. But the absolute cost of contruction,
# initialization and calling poll(0) is ~25us so code simplicity
# wins.
poll = select.poll()
for fd in fds:
poll.register(fd, select.POLLIN)
ready_file_descriptors = [fd for fd, _ in poll.poll(1)]
else:
ready_file_descriptors, _, _ = select.select(fds, [], [], 1)
for fd in ready_file_descriptors:
fd_to_callback[fd]()
else:
# select([], [], [], 1) is not supported on Windows.
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
是否可以在PTVS中的Google App Engine webapp2应用程序中设置断点,这些应用程序是从localhost加载页面时触发的?
编辑:使用cprcrack的设置,我能够成功运行GAE,但在加载主页面时出现错误
Traceback (most recent call last):
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3003, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2862, in _Dispatch
base_env_dict=env_dict)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 719, in Dispatch
base_env_dict=base_env_dict)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1797, in Dispatch
self._module_dict)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1648, in ExecuteCGI
app_log_handler = app_logging.AppLogsHandler()
File "C:\Python\lib\logging\__init__.py", line 660, in __init__
_addHandlerRef(self)
File "C:\Python\lib\logging\__init__.py", line 639, in _addHandlerRef
_releaseLock()
File "C:\Python\lib\logging\__init__.py", line 224, in _releaseLock
_lock.release()
File "C:\Python\lib\threading.py", line 138, in release
self.__count = count = self.__count - 1
File "C:\Python\lib\threading.py", line 138, in release
self.__count = count = self.__count - 1
File "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Python Tools for Visual Studio\2.0\visualstudio_py_debugger.py", line 557, in trace_func
return self._events[event](frame, arg)
File "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Python Tools for Visual Studio\2.0\visualstudio_py_debugger.py", line 650, in handle_line
if filename == frame.f_code.co_filename or (not bound and filename_is_same(filename, frame.f_code.co_filename)):
File "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Python Tools for Visual Studio\2.0\visualstudio_py_debugger.py", line 341, in filename_is_same
import ntpath
File "C:\Python\lib\ntpath.py", line 8, in <module>
import os
File "C:\Python\lib\os.py", line 120, in <module>
from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
ImportError: cannot import name curdir
Run Code Online (Sandbox Code Playgroud)
是否发生此错误是因为我需要回滚到Python 2.5以使用旧的dev_appserver?
常规 - >启动文件:
C:\Program Files\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\gcloud\gcloud.py
Run Code Online (Sandbox Code Playgroud)
Debug-> Script Arguments:
preview app run app.yaml --python-startup-script "pydevd_startup.py" --max-module-instances="default:1"
Run Code Online (Sandbox Code Playgroud)
休息与原始答案相同:
我终于运行了:对于格式化的帮助,请看这里,只需复制和粘贴:
制作一个新的python文件"pydevd_startup.py"
插入此:
import json
import sys
if ':' not in config.version_id:
# The default server version_id does not contain ':'
sys.path.append("lib")
import ptvsd #ptvsd.settrace() equivalent
ptvsd.enable_attach(secret = 'joshua')
ptvsd.wait_for_attach()
Run Code Online (Sandbox Code Playgroud)将其保存在您应用的工作目录中
现在打开VS中的项目设置并输入:
General->Startup File: C:\Cloud SDK\google-cloud-sdk\bin\dev_appserver.py
General->Working Directory: .
Debug->Search Paths: C:\Cloud SDK\google-cloud-sdk\lib
Debug->Script Arguments: --python_startup_script=".\pydevd_startup.py" --automatic_restart=no --max_module_instances="default:1" ".\app.yaml"
Run Code Online (Sandbox Code Playgroud)
您可能也可以使用.而不是,<path-to-your-app>但我想要安全.
用Ctrl+ F5运行调试器,无需调试.这听起来很奇怪,但我们现在实际上没有调试,只是运行开发服务器而不是启动我们的脚本来注入调试器代码并等待我们的远程调试器连接,这将在下一步中发生
DEBUG->Attach to Process <Ctrl+Alt+P>
Qualifier: tcp://joshua@localhost:5678 <ENTER>
Run Code Online (Sandbox Code Playgroud)
约书亚是你的秘密钥匙.如果你想改变它(你应该),你还必须在pydevd_startup.py中更改它.有关详细信息,请参阅pytool参考.
| 归档时间: |
|
| 查看次数: |
3094 次 |
| 最近记录: |