简体   繁体   中英

Tornado 'Hello World' Error

I am trying to run the following HelloWorld Script at Command Line

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

and I am getting the following error

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

Brand New to Python , can someone explain what the problem being pointed out is? PS helloworld.py is in the /home/username/public_html/tornado-1.2.1/ directory, and there is a tornado subdirectory in the same directory.

Edit: (Ignore this edit now) The command i am running is

python helloworld.py

The result of python -V is

Python 2.4.3

Unfortunately Tornado doesn't work with versions before 2.5 so this might be the problem. However, I have installed Python 2.6.6 How do I ensure that it is running with the correct version of Python and not the older one?

EDIT II

Now I have set Python to 2.6.6

and running

python helloworld.py

doesn't produce any output. The program just freezes at the command line.

Any thoughts here?

As you've found out yourself, the problem is that python 2.4 does not support the conditional expression operator.

How you can switch to another Python version depends on your system. On debian and Ubuntu, you can edit /usr/share/python/debian_defaults . On all Linux systems, you can remove /usr/bin/python and link to the version you'd like:

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

Alternatively, you can modify the PATH environment variable to contain a directory with the desired python binary before /usr/bin (this is probably the way to go on Windows). You can make this permanent by editing ~/.profile (at every login) or ~/.bashrc (in interactive, bash shells).

To get Python 2.6 as default make sure you've mapped python to /usr/bin/python2.6 in your .bash_rc .

If you're trying to fix this, you'll need to go through and swap out the conditional operator:

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

This syntax ( action if action is not None else signal.SIG_DFL ) is only available in Python 2.>=5

The alt? Not as nice but workable:

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

I HIGHLY RECOMMEND THAT YOU SIMPLY UPGRADE TO THE LATEST VERSION OF PYTHON. THERE IS NO GUARANTEE THAT YOU WON'T FIND OTHER ISSUES. (Unless, of course, you want the learning experience).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM