Торнадо "Hello World" Ошибка - PullRequest
5 голосов
/ 22 июня 2011

Я пытаюсь запустить следующий скрипт 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 ]

2 голосов
/ 22 июня 2011

Как вы узнали сами, проблема в том, что 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).

1 голос
/ 22 июня 2011

Чтобы получить 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

Альт? Не так хорошо, но выполнимо:

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

Я НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ, ЧТО ВЫ ПРОСТО ОБНОВЛЯЕТЕ ПОСЛЕДНУЮ ВЕРСИЮ ПИТОНА. НЕТ ГАРАНТИИ, ЧТО ВЫ НЕ НАЙДЕТЕ ДРУГИЕ ВОПРОСЫ. (Если, конечно, вам не нужен опыт обучения).

...