2016-04-23 215 views
3

我试图运行这里描述的基本helloworld代码https://cloud.google.com/appengine/docs/python/。但是,每当我尝试dev_appserver.py helloworld /命令时,我都会收到dev_appserver.py命令的使用错误。GAE Python:dev_appserver.py:错误:参数太少

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

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

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

我试图从“项目”文件夹和“的HelloWorld”文件夹中执行dev_appserver.py的HelloWorld /命令。但是在这两种情况下我都会得到同样的错误。

任何帮助将不胜感激!

谢谢!

+1

嗨。确保您在包含app.yaml文件的文件夹中调用dev_appserver.py命令。在其他情况下,请添加更多关于您执行此命令的信息。 – Nico

+6

您是否在helloworld文件夹中尝试过'dev_appserver.py app.yaml'? – Shark

回答

7

您只需要在命令中执行dev_appserver.py,路径为app.yaml,如注释所示。

1

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

所以我“调试” 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可以发布这样的代码!

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%,但我预料如果它不在那里,错误会是''dev_appserver.py''这样的错误不是识别为一个内部或外部的命令”,而不是执行与打印一个Python错误....)

EDIT

改变之后,‘与特定的节目’一个文件类型或协议相关联(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. 
+1

我可以验证我有同样的问题。还以为我只有一个Python,但我没有。感谢提示@红豌豆 – Mathias

+0

感谢@Mathias,如果这个答案对您有帮助,请考虑提高它以便其他人可能会认为它有帮助 –

+1

显然已经做到了:) – Mathias

0

我建议CD插入的HelloWorld文件夹,然后运行dev_appserver.py .不要忘了结尾点“”标志。 希望它可以工作

0

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

所以在谷歌文档,你会发现执行以下操作: -

> 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 
5

我想我已经找到了这个错误背后的“真正”的问题。

试图在dev_appserver.py文件中放入一些print语句,并发现我们给出的任何论点都没有被传递,因此错误。在谷歌搜索遇到了this SO帖子,这解释了这个问题。在这样做的变化下面的命令准确无误地运行:d

dev_appserver.py app.yaml

报价,如此回答更容易参考:

I think I solved this. For some reason there is a SECOND place in the registry (besides that shown by the file associations stored in HKEY_CLASSES_ROOT\Python.File\shell\open\command):

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

This seems to be the controlling setting on my system. The registry setting above adds the "%*" to pass all arguments to python.exe (it was missing in my registry for some reason).

+1

是的,编辑注册表修复了我。我需要在另一台机器上做同样的事情,所以我写了这些[分步说明](https://gist.github.com/bryik/1f507969f5239625628d6b63f04eae60)。 – bryik

+0

谢谢!这个固定! – tmoore

相关问题