Làm thế nào để chạy một chương trình Python trực tiếp?


13

Làm thế nào để chạy một chương trình Python trực tiếp?

Tôi đã tạo một tệp .py (giả sử, mnik.py ) trong gedit. Nó chạy trơn tru trong thiết bị đầu cuối.

Lệnh đi

python3 mnik.py

Nhưng bất cứ khi nào tôi nhấp vào tập tin, nó được mở bằng gedit. Tôi không thể chạy nó trực tiếp bằng cách nhấp vào.

Phải làm sao



4
@kasperd Nhập python3vào dòng lệnh với một đối số là một cách tuyệt vời để chạy các kịch bản python. Trên thực tế, đây là cách dễ nhất để chạy một chương trình yêu cầu thiết bị đầu cuối và các đối số (giống như nhiều tập lệnh của riêng tôi, nhưng cũng có các chương trình như mercurial, sphinx). Quan tâm để giải thích tại sao những gì tôi đã làm trong hơn 20 năm không phải là cách thích hợp?
Anthon

3
@kasperd Một tập lệnh Python (hoặc chương trình) được viết đúng không cần phải có dòng shebang. Nếu không, nó vẫn là một kịch bản Python theo mọi cách. Kịch bản đó không thể được thực thi bởi các shell Linux ở dạng tay ngắn mà bạn có vẻ thích. Cũng có những môi trường không yêu cầu tập lệnh Python phải có dòng shebang và cho phép chúng bắt đầu tập lệnh bằng cách nhấp đúp.
Anthon

1
@kasperd Hạt nhân cần gì để tập lệnh Python chạy bằng cách sử dụng ./scriptnamekhông xác thực yêu cầu của bạn rằng chạy tập lệnh từ dòng lệnh bằng cách sử dụng python3. Có nhiều cách khác nhau chạy script python và làm python3 ./mnik.pycũng là một cách thích hợp làm việc, nó chỉ là khác nhau (và ít nhất bạn nhận được python3 như vậy và không python2 như có nhiều khả năng với hầu hết các câu trả lời cho đến nay)
Anthon

1
Sử dụng <ngôn ngữ> <script> là một cách hoàn toàn hợp lệ và được chấp nhận để chạy tập lệnh. Đề nghị nó là thực hành xấu nên được nhăn mặt.
Jacob Vlijm

Câu trả lời:


26

Có hai điều cần thiết.

  1. Một tập lệnh phải có #!dòng thông báo cho HĐH sử dụng trình thông dịch. Trong trường hợp của bạn, dòng đầu tiên của bạn trong mã phải là#!/usr/bin/env python3
  2. Bạn cần mở trình quản lý tệp, đi đến Chỉnh sửa -> Tùy chọn -> Hành vi và chọn những việc cần làm với các tệp thi hành

    nhập mô tả hình ảnh ở đây

    1. Cuối cùng, hãy chắc chắn rằng tập tin của bạn thực sự có các quyền thực thi được thiết lập. Trong thiết bị đầu cuối bạn có thể làm chmod +x /path/to/script.pyvà trong GUI, nhấp chuột phải vào tệp và thay đổi Thuộc tính của nó -> Quyền

    nhập mô tả hình ảnh ở đây

    nhập mô tả hình ảnh ở đây

Lưu ý về dòng shebang

Dòng đầu tiên được gọi là dòng shebang và phải bắt đầu bằng #!; bất cứ điều gì đến tiếp theo là tên của trình thông dịch sẽ đọc mã của bạn. Trong trường hợp bạn đang sử dụng, python3bạn có thể sử dụng #!/usr/bin/python3hoặc #!/usr/bin/env python3cho tính di động. Nếu bạn không sử dụng mã sẽ dành riêng cho phiên bản python - chỉ cần sử dụng#!/usr/bin/env python

Lưu ý về đầu ra tập lệnh:

Nếu tập lệnh của bạn in đầu ra ra bàn điều khiển, nó sẽ cần phải có cửa sổ đầu cuối hoặc sử dụng các hộp thoại GUI như zenity. Thích sử dụng Run in Terminaltùy chọn nếu bạn muốn xem mã. Nếu bạn muốn tập lệnh làm một cái gì đó mà không thấy đầu ra giao diện điều khiển - sử dụng Runtùy chọn.

nhập mô tả hình ảnh ở đây

Ngoài ra, nếu bạn có các tham số dòng lệnh, chẳng hạn như sys.argv[1]trong tập lệnh, bạn không thể đặt chúng trừ khi bạn mở cửa sổ đầu cuối.


1
@PriyadarshiPaul Điều đó giống như Fileschương trình trên trình khởi chạy. Trong windows-speak đó sẽ là file explorer hoặcMy Computer
Sergiy Kolodyazhnyy

@PriyadarshiPaul nó nautilusở Terminal
grooveplex


3
#!/usr/bin/env pythonsẽ gọi Python2 trên hầu hết các hệ thống Ubuntu. Mặc dù bạn có thể tạo một tập lệnh Python được viết cho Python3 tương thích với Python2, tôi không cho rằng OP đã làm như vậy. #!/usr/bin/env python3có vẻ như một shebang thích hợp hơn
Anthon

1
Và tại sao chúng ta lại đưa Arch Linux vào đây? Có lẽ tôi sẽ gặp một chút ý nghĩa, nhưng chúng ta đang nói về Ubuntu ở đây. Trên Ubuntu theo mặc định python được liên kết với python2.7 Nếu bạn đang phát triển phần mềm, có lẽ bạn nên biết các liên kết ở đâu, nếu bạn sử dụng một cái gì đó không phải là phiên bản mặc định của hệ điều hành của bạn, sau đó chỉ định rõ ràng như vậy. Chắc chắn, chúng tôi có thể phục vụ cho từng câu hỏi riêng lẻ, nhưng vì khóc to - nếu bạn viết mã, thì hãy làm đúng.
Sergiy Kolodyazhnyy

3

Bạn cần đặt vị trí của chương trình để thực thi mã của mình trên dòng đầu tiên và sau đó bạn cần đặt tập lệnh chạy dưới dạng thực thi bằng cách thay đổi quyền của nó. Điều này giả định rằng bạn đang khởi chạy các ứng dụng của mình từ thiết bị đầu cuối hoặc tập lệnh khác.

Tìm bản cài đặt Python của bạn

$ which python
/usr/bin/python

Thêm vị trí chương trình vào dòng trên cùng của chương trình của bạn #!ở phía trước

#!/usr/bin/python

# Python code goes here....

Đặt tập lệnh Python để có quyền thực thi

$ chmod 700 test.py

Bây giờ bạn có thể chạy tập lệnh trực tiếp

$ ./test.py

Danh sách mã cho test.txt

#!/usr/bin/python

print "test"

2

Nếu bạn muốn chạy chương trình này mà không cần gõ, python3 mnik.pybạn phải làm cho tập lệnh có thể thực thi được và đảm bảo rằng nó python3được sử dụng để chạy nó.

Việc đầu tiên bạn có thể làm bằng cách chạy

 chmod +x mnik.py

thứ hai bạn có thể làm bằng cách thêm vào như dòng đầu tiên của tập lệnh, dòng shebang gọi python3 . Trên tất cả các hệ thống Ubuntu mà tôi đã làm việc với python3, bạn có thể lấy python3 bằng cách thêm dòng này ở trên cùng:

#!/usr/bin/env python3

Sau hai thay đổi bạn có thể gõ /path/to/mnik.py, ./mnik.pyhoặc chỉ mnik.py(sau này đòi hỏi phải có kịch bản được trong PATH của bạn).

Nếu bạn thực hiện những thay đổi này, bạn cũng có thể muốn xem xét đổi tên mnik.pythành mnik, đó là cách làm phổ biến với các gói Python với các lệnh được xuất bản trên PyPI.


ok, bất kỳ thứ nào trong số này bây giờ không hoạt động
Priyadarshi Paul

"Ok" là gì? "Những" này đề cập đến điều gì?
Anthon

Đó là nói ** usr / bin / env: thông dịch viên xấu: Không có tệp hoặc thư mục như vậy **
Priyadarshi Paul

Có ít nhất một /mất tích ở phía trước đó. Hãy giải thích "Nó" là gì trong bình luận của bạn. Có phải là vỏ bash? Có phải là cửa sổ Command.com? Từ những gì bạn đang gọi chương trình và với cú pháp dòng lệnh gì?
Anthon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.