龙卷风'Hello World'错误

时间:2011-06-22 16:57:40

标签: python tornado

我正在尝试在命令行运行以下HelloWorld脚本

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()

我收到以下错误

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

不幸的是,Tornado不适用于2.5之前的版本,所以这可能是问题所在。但是,我已经安装了Python 2.6.6如何确保它使用正确版本的Python而不是旧版本运行?

编辑II

现在我已将Python设置为2.6.6

并正在运行

python helloworld.py

不会产生任何输出。该程序只是在命令行冻结。

这里有什么想法吗?

2 个答案:

答案 0 :(得分:2)

正如您自己发现的那样,问题是python 2.4不支持条件表达式运算符。

如何切换到另一个Python版本取决于您的系统。在debian和Ubuntu上,您可以编辑/usr/share/python/debian_defaults。在所有Linux系统上,您可以删除/ usr / bin / 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中)来使其永久化。

答案 1 :(得分:1)

要将Python 2.6作为默认值,请确保已在python中将/usr/bin/python2.6映射到.bash_rc

如果您正在尝试修复此问题,则需要完成并交换条件运算符:

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。没有保证您不会发现其他问题。 (当然,除非你想要学习经验)。