GAE Python:dev_appserver.py:错误:参数太少

时间:2016-04-23 02:13:28

标签: python python-2.7 google-app-engine anaconda

我正在尝试运行此处描述的基本helloworld代码https://cloud.google.com/appengine/docs/python/。但是,每当我尝试使用dev_appserver.py helloworld /命令时,我都会收到dev_appserver.py命令的使用错误。

我已经安装了Python 2.7,并且在我的系统上安装了Python 2.7 Anaconda。 Anaconda Python会成为问题的原因吗?

我的代码的文件结构如下:

  • 项目
    • 的HelloWorld
      • app.yaml
      • helloworld.py
    • README.md

我尝试从'Project'文件夹和'helloworld'文件夹中执行dev_appserver.py helloworld /命令。但在这两种情况下我都得到同样的错误。

任何帮助将不胜感激!

谢谢!

6 个答案:

答案 0 :(得分:9)

我想我发现了这个错误背后的“真实”问题。

尝试在print文件中放置一些dev_appserver.py语句,发现我们给出的任何参数都没有被传递,因此错误。在谷歌搜索遇到了this SO帖子,这解释了问题。在做这个改变时,以下命令完美无缺:D

dev_appserver.py app.yaml

引用SO答案以便于参考:

  

我想我解决了这个问题。由于某种原因,注册表中存在第二个位置(除了存储在HKEY_CLASSES_ROOT \ Python.File \ shell \ open \ command中的文件关联所示):

     

[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command] @="\"C:\\Python25\\python.exe\" \"%1\" %*"

     

这似乎是我系统的控制设置。上面的注册表设置添加了“%*”以将所有参数传递给python.exe(由于某种原因,它在我的注册表中丢失了。)

答案 1 :(得分:6)

您只需按照评论中的建议,在命令本身中执行带dev_appserver.py路径的app.yaml

答案 2 :(得分:3)

我认为OP在描述多个Python安装时可能已经确定了一个潜在的问题。

如果我没有指定哪个Python安装(我想到我只有一个...),那么它就会失败:

C:\Python27>"C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin\dev_appserver.py" "C:\users\jessmine\documents\ttbtamer\app.yaml"
usage: dev_appserver.py [-h] [-A APP_ID] [--host HOST] [--port PORT]
...etc...
dev_appserver.py: error: too few arguments

但是如果我首先通过调用 Python 指定使用哪个Python,@ C:\Python27\python.exe,那么它可以工作:

C:\Python27>"C:\Python27\python.exe" "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin\dev_appserver.py" "C:\users\jessmine\documents\ttbtamer\app.yaml"
INFO     2016-11-18 10:09:14,299 devappserver2.py:769] Skipping SDK update check.

无论如何,因为我不认为我的计算机上安装了其他Python,所以我可能会误解这里的差异。但对我来说,修复是显式调用python.exe

(并且要清楚,我知道将Python.exe位置放入%PATH%,但我预计如果它不存在,那么错误就会像&那样#34;' dev_appserver.py'不被识别为内部或外部命令"而不是执行和打印Python错误....)

修改

更改"将文件类型或协议与特定程序相关联后#34; (example here*.py 明确地使用C:\ Python27 \ python.exe,然后我不再需要在我的cmd中手动调用C:\Python27\python.exe;即我的第一个例子正常工作:

C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin>dev_appserver.py "C:\users\jessmine\documents\ttbtamer\app.yaml"
INFO     2016-11-18 10:33:50,269 devappserver2.py:769] Skipping SDK update check.

答案 3 :(得分:2)

我遇到了同样的问题。我甚至在一台新机器上安装了所有东西,我又遇到了同样的错误。

所以我“调试”了dev_appserver.py并且我发现传递给它的参数(即'app.yaml'或'。'或'\ hello_world')没有传递给下面的代码文件:

...\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\devappserver2.py

在这个文件中检查了参数,产生臭名昭着的错误“参数太少”。 出于对失去的时间的绝望,我做了一个快速(并且肯定是丑陋的)补丁。

我在第302和303行注释了验证规则:

parser.add_argument(
  'config_paths', metavar=arg_name, nargs='+', help=arg_help)

在第758行,我更换了:

options.config_paths, options.app_id)

使用静态文件名:

{'app.yaml'}, options.app_id)

至少现在我能够再次启动服务器并开发我的应用程序。现在我可以再次工作,我将尝试更好地了解如何纠正问题。

我不是Python也不是Google App Engine专家,所以我希望有人会提出更好的更正并更好地解释问题,因为我无法相信Google可以发布这样的错误代码!

答案 4 :(得分:0)

我建议你进入你的helloworld文件夹并运行dev_appserver.py .不要忘记结束点'。'标志。 希望它有效

答案 5 :(得分:0)

在我的情况下,我可以通过执行以下两个操作来解决此问题: 1)。在命令的开头添加了“python” 2)。提供了“dev_appserver.py”文件的完整路径。

因此,在Google文档中,您会发现执行以下操作: -

> dev_appserver.py ./ --php_executable_path=/path/to/php-cgi

(请注意,我试图在这里运行php示例和Windows环境...)

而是运行以下命令:

> python "c:\<path to the directory containing the dev_appserver.py script>\dev_appserver.py" ./ --php_executable_path=/path/to/php-cgi