2016-04-23 213 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

相關問題