2011-06-22 113 views
5

我想在命令行旋風的「Hello World」錯誤

import tornado.httpserver 
import tornado.ioloop 
import tornado.options 
import tornado.web 

from tornado.options import define, options 

define("port", default=8888, help="run on the given port", type=int) 


class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
     self.write("Hello, world") 


def main(): 
    tornado.options.parse_command_line() 
    application = tornado.web.Application([ 
     (r"/", MainHandler), 
    ]) 
    http_server = tornado.httpserver.HTTPServer(application) 
    http_server.listen(options.port) 
    tornado.ioloop.IOLoop.instance().start() 


if __name__ == "__main__": 
    main() 

運行下面的HelloWorld腳本,我收到以下錯誤

File "helloworld.py", line 17, in ? 
    import tornado.httpserver 
    File "/home/username/public_html/tornado-1.2.1/tornado/httpserver.py", line 28, in ? 
    from tornado import ioloop 
    File "/home/username/public_html/tornado-1.2.1/tornado/ioloop.py", line 184 
    action if action is not None else signal.SIG_DFL) 
      ^
SyntaxError: invalid syntax 

全新到Python,可有人解釋指出的問題是什麼?附: helloworld.py位於/home/username/public_html/tornado-1.2.1/目錄中,同一目錄中有一個tornado子目錄。

編輯:(現在忽略此編輯) 我運行的命令是

python helloworld.py 

python -V結果是

的Python 2.4.3

不幸的是龍捲風不使用2.5之前的版本,所以這可能是問題。但是,我已經安裝了Python 2.6.6我如何確保它使用正確版本的Python而不是舊版本運行?

編輯II

現在我已經設置Python來2.6.6

和運行

python helloworld.py 

不產生任何輸出。程序只是在命令行中凍結。

這裏有什麼想法嗎?

+1

你使用的是什麼python版本? – Schildmeijer

+2

你運行的是什麼版本的python,龍捲風需要什麼版本的python? –

+1

您的代碼適用於Python 2.7。更高版本有其他依賴項來運行Tornado。 – Ravi

回答

2

正如你發現你自己,問題是python 2.4不支持條件表達式操作符。

如何切換到另一個Python版本取決於您的系統。在debian和Ubuntu上,你可以編輯/usr/share/python/debian_defaults。在所有的Linux系統,你可以刪除在/ usr /斌/ Python和鏈接的版本,你想:

sudo mv /usr/bin/python /usr/bin/python.dist 
sudo ln -s /usr/bin/python2.5 /usr/bin/python 

或者,你可以修改PATH環境變量包含與之前所期望的python二進制目錄/usr/bin(這可能是在Windows上的方式)。您可以通過編輯~/.profile(每次登錄)或~/.bashrc(在交互式bash shell中)來使其成爲永久。

+0

我修改了Path來確保它的Python 2.6.6。現在我運行該程序,什麼也沒有發生!...請參閱問題的細節。 – algorithmicCoder

+0

@algorithmicCoder在您的提示中輸入'python'時,什麼也不會發生?如果是這樣,請發佈'ls -l $(which python)'的輸出。另外,'strace python'的輸出(可選擇使用你的程序)將會起到非常重要的作用。另外,請發佈修改過的路徑('echo'$ PATH''的輸出。 – phihag

+0

輸入「python」帶我到python命令行提示符。 bin:$ PATH。strace似乎太長了才能發佈...我應該尋找什麼? – algorithmicCoder

1

要將Python 2.6設置爲默認值,請確保在.bash_rc中映射了python/usr/bin/python2.6

如果你試圖解決這個問題,你需要去通過和換出條件運算符:

if seconds is not None: 
     signal.signal(signal.SIGALRM, 
         action if action is not None else signal.SIG_DFL) 

這句法(action if action is not None else signal.SIG_DFL)僅可在Python 2> = 5

該alt?不是很好,但可行:

if seconds is not None: 
     if action is not None: 
      tmpaction = action 
     else 
      tmpaction = signal.SIG_DFL 
     signal.signal(signal.SIGALRM,tmpaction) 

我強烈建議您只需升級到Python的最新版本。沒有任何擔保,您不會找到其他問題。 (當然,除非你想學習經驗)。

+0

我修改了Path以確保其Python 2.6.6。現在我運行該程序,什麼也沒有發生!...請參閱問題的細節。 – algorithmicCoder