2011-06-22 27 views
5

Estoy tratando de ejecutar la siguiente secuencia de comandos HelloWorld en la línea de comandosTornado 'Hola Mundo'

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

y yo estoy recibiendo el siguiente 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 

estrenar a Python, alguien puede explicar ¿Cuál es el problema que se señala? PD helloworld.py está en el directorio /home/username/public_html/tornado-1.2.1/, y hay un subdirectorio tornado en el mismo directorio.

Editar: (ignorar esta edición ahora) El comando estoy funcionando es

python helloworld.py 

El resultado de python -V es

Python 2.4.3

Desafortunadamente Tornado no lo hace trabajar con versiones anteriores a 2.5, por lo que este podría ser el problema. Sin embargo, he instalado Python 2.6.6 ¿Cómo me aseguro de que se esté ejecutando con la versión correcta de Python y no con la versión anterior?

EDITAR II

Ahora he puesto a Python 2.6.6

y funcionando

python helloworld.py 

no produce ninguna salida. El programa simplemente se congela en la línea de comando.

¿Algún comentario aquí?

+1

¿Qué versión de python estás usando? – Schildmeijer

+2

¿Qué versión de python está ejecutando, y qué versión de python necesita el tornado? –

+1

Tu código funciona en Python 2.7. Las versiones más altas tienen otras dependencias para ejecutar Tornado. – Ravi

Respuesta

2

Como ha descubierto usted mismo, el problema es que python 2.4 no admite el operador de expresión condicional.

Cómo puede cambiar a otra versión de Python depende de su sistema. En Debian y Ubuntu, puede editar /usr/share/python/debian_defaults.En todos los sistemas Linux, se puede eliminar/usr/bin/python y enlace a la versión desea:

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

Alternativamente, se puede modificar la variable de entorno PATH para contener un directorio con el deseado python binario antes /usr/bin (este es probablemente el camino a seguir en Windows). Puede hacerlo permanente editando ~/.profile (en cada inicio de sesión) o ~/.bashrc (en interactivo, bash shells).

+0

He modificado la ruta para asegurarme de que su Python 2.6.6. ¡Ahora ejecuto el programa y no pasa nada! ... Consulte la pregunta para obtener más detalles. – algorithmicCoder

+0

@algorithmicCoder Cuando ingresa 'python' en su mensaje, ¿tampoco sucede nada? Si es así, publique la salida de 'ls -l $ (which python)'. Además, la salida de 'strace python' (opcionalmente con su programa) sería de gran ayuda. Además, publique la ruta modificada (la salida de 'echo" $ PATH "'. – phihag

+0

Escribir "python" me lleva al indicador de línea de comando de python ... por lo que actúa como se esperaba. Exporté PATH = $ HOME/py26/bin: $ PATH. la cadena parece demasiado larga para publicar ... ¿qué debo buscar? – algorithmicCoder

1

Para obtener Python 2.6 como predeterminado, asegúrese de haber mapeado python en /usr/bin/python2.6 en su .bash_rc.

Si usted está tratando de solucionar este problema, tendrá que ir a través y intercambiar el operador condicional:.

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

Esta sintaxis (action if action is not None else signal.SIG_DFL) está disponible sólo en Python 2> = 5

El alt? No es tan bonito pero factibles:

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

Recomiendo encarecidamente que sólo tiene que actualizar a la última versión de Python. NO HAY GARANTÍA DE QUE NO ENCUENTRE OTROS PROBLEMAS. (A menos que, por supuesto, quieras la experiencia de aprendizaje).

+0

He modificado la ruta para asegurarme de que su Python 2.6.6. ¡Ahora ejecuto el programa y no pasa nada! ... Consulte la pregunta para obtener más detalles. – algorithmicCoder

Cuestiones relacionadas