2011-06-22 33 views
5

Tôi cố gắng để chạy HelloWorld Script sau vào Command LineTornado 'Hello World' Lỗi

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

và tôi nhận được lỗi sau

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 để Python, ai đó có thể giải thích vấn đề được chỉ ra là gì? P.S. helloworld.py nằm trong thư mục /home/username/public_html/tornado-1.2.1/ và có một thư mục con tornado trong cùng một thư mục.

Edit: (Bỏ qua chỉnh sửa này ngay bây giờ) Lệnh tôi đang chạy là

python helloworld.py 

Kết quả của python -V

Python 2.4.3

Thật không may Tornado không làm việc với các phiên bản trước 2.5 nên đây có thể là vấn đề. Tuy nhiên, tôi đã cài đặt Python 2.6.6 Làm thế nào để đảm bảo rằng nó đang chạy với phiên bản Python đúng và không phải là phiên bản cũ hơn?

EDIT II

Bây giờ tôi đã đặt Python để 2.6.6

và chạy

python helloworld.py 

không sản xuất bất kỳ sản lượng. Chương trình chỉ đóng băng ở dòng lệnh.

Mọi suy nghĩ ở đây?

+1

bạn đang sử dụng phiên bản python nào? – Schildmeijer

+2

Phiên bản python nào bạn đang chạy và phiên bản nào của python cần lốc xoáy? –

+1

Mã của bạn hoạt động trên Python 2.7. Các phiên bản cao hơn có các phụ thuộc khác để chạy Tornado. – Ravi

Trả lời

2

Như bạn đã phát hiện ra chính mình, vấn đề là python 2.4 không hỗ trợ toán tử biểu thức điều kiện.

Cách bạn có thể chuyển sang phiên bản Python khác tùy thuộc vào hệ thống của bạn. Trên debian và Ubuntu, bạn có thể chỉnh sửa /usr/share/python/debian_defaults.Trên tất cả các hệ thống Linux, bạn có thể xóa/usr/bin/python và liên kết đến các phiên bản mà bạn muốn:

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

Ngoài ra, bạn có thể thay đổi biến PATH môi trường có chứa một thư mục với mong muốn python nhị phân trước /usr/bin (đây có lẽ là cách để đi trên Windows). Bạn có thể thực hiện việc này vĩnh viễn bằng cách chỉnh sửa ~/.profile (tại mọi thông tin đăng nhập) hoặc ~/.bashrc (trong tương tác, bash shell).

+0

Tôi đã sửa đổi đường dẫn để đảm bảo rằng Python 2.6.6 của nó. Bây giờ tôi chạy chương trình và không có gì xảy ra! ... Vui lòng xem câu hỏi để biết chi tiết. – algorithmicCoder

+0

@algorithmicCoder Khi bạn nhập 'python' vào dấu nhắc của bạn, không có gì xảy ra? Nếu vậy, vui lòng đăng đầu ra của 'ls -l $ (mà trăn)'. Ngoài ra, đầu ra của 'strace python' (tùy chọn với chương trình của bạn) sẽ là trợ giúp vô giá. Ngoài ra, xin vui lòng gửi đường dẫn sửa đổi (đầu ra của 'echo '$ PATH" '. – phihag

+0

Nhập" python "đưa tôi đến dấu nhắc dòng lệnh python..so nó hoạt động như mong đợi. Tôi đã xuất PATH = $ HOME/py26/bin: $ PATH .. strace dường như quá dài để đăng ... những gì tôi nên tìm? – algorithmicCoder

1

Để nhận Python 2.6 làm mặc định, hãy đảm bảo bạn đã lập bản đồ python thành /usr/bin/python2.6 trong số .bash_rc của mình.

Nếu bạn đang cố gắng để khắc phục điều này, bạn sẽ cần phải đi qua và trao đổi trên các nhà điều hành có điều kiện:.

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

Cú pháp này (action if action is not None else signal.SIG_DFL) chỉ có sẵn bằng Python 2> = 5

Bàn phím? Không phải là tốt đẹp nhưng hoàn toàn khả thi:

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

Tôi thật sự khuyên bạn nên SIMPLY NÂNG CẤP ĐẾN PHIÊN BẢN MỚI NHẤT CỦA PYTHON. KHÔNG CÓ ĐẢM BẢO R YOUNG BẠN KHÔNG TÌM HIỂU CÁC VẤN ĐỀ KHÁC. (Trừ khi, tất nhiên, bạn muốn có kinh nghiệm học tập).

+0

Tôi đã sửa đổi Đường dẫn để đảm bảo rằng Python 2.6.6 của nó. Bây giờ tôi chạy chương trình và không có gì xảy ra! ... Vui lòng xem câu hỏi để biết chi tiết. – algorithmicCoder