Làm thế nào tôi có thể chạy chương trình python của tôi trực tiếp từ shell?


10

Tôi đã viết một kịch bản. Khi nó bắt đầu, nó sẽ không dừng lại và nó tiếp tục lấy dữ liệu từ Internet. Tôi có thể gọi nó theo cách này:

cd /User/Desktop/project/internetScanner/
python3 main.py start

Nhưng tôi muốn gọi nó trực tiếp từ thiết bị đầu cuối như thế này, trong đích đến:

internetScanner start

Làm thế nào tôi có thể làm như vậy?


2
Tôi tự hỏi nếu tiêu đề có thể được thay đổi về điều này ..
user606723

@ user606723 Vui lòng đề xuất chỉnh sửa để thay đổi nó. Tiêu đề đầu tiên "Làm thế nào để chương trình của tôi có thể chạy trên shell?" không tốt lắm
slhck

Câu trả lời:


27

Bạn có thể nên đổi tên tập tin của bạn main.pythành internetScanner. Phần mở rộng trên * nix hoàn toàn là tùy chọn. Nó không quan trọng ở đây.

mv main.py internetScanner

Sau đó, thêm dòng sau vào tệp này, ngay từ đầu:

#!/usr/bin/env python3

Điều này sẽ đảm bảo rằng khi shell thực thi tệp, nó sẽ biết sử dụng python3để diễn giải nội dung. Điều này được gọi là Shebang . Bây giờ, làm cho tập tin thực thi:

chmod +x internetScanner

Bây giờ bạn có thể chạy chương trình của bạn từ bên trong /User/Desktop/project/internetScanner/:

./internetScanner start

Chương trình của bạn sẽ chạy ở nền trước và tiếp tục chạy cho đến khi bạn nhấn Ctrl- C. Nếu bạn không muốn điều này, bạn cũng có thể khởi động chương trình ở chế độ nền, bằng cách thêm dấu và sau lệnh:

./internetScanner start &

Điều này sẽ cho phép chương trình của bạn chạy, nhưng bạn có thể tiếp tục sử dụng trình bao của mình. Điều này được gọi là kiểm soát công việc, và có một hướng dẫn đơn giản về nó ở đây .

Nếu bây giờ bạn muốn có thể chạy chương trình từ bất kỳ đâu trên hệ thống, bạn cần thêm internetScannerthư mục vào PATH: PATH và các biến môi trường khác là gì và làm cách nào tôi có thể đặt hoặc sử dụng chúng?


Câu trả lời tốt. Tôi khuyên bạn nên thêm rằng anh ta có thể muốn kết thúc lệnh bằng ký hiệu (&) nếu anh ta không muốn đợi nó và / hoặc chuyển hướng luồng đầu ra và lỗi của nó sang một tệp.
Ben Hocking

@BenHocking Cảm ơn, tôi đã thêm nó vào câu trả lời.
slhck

X &không tách quá trình ra khỏi lớp vỏ điều khiển, nó chỉ làm nền cho quá trình, nghĩa là nếu lớp vỏ đó thoát ra thì nó sẽ nhận được tín hiệu TATE gửi đến nó; Vì vậy, nếu bạn không muốn rằng bạn nên sử dụng tách ra , detach ./internetScanner start.
Dan D.

1
@DanD. Cẩu hay nohup, disownhoặc at, et cetera. Làm cách nào để tách toàn bộ quá trình khỏi Terminal?
slhck

Điều đáng chú ý là nó vẫn có thể được đặt tên main.pymiễn là nó được liên kết với internetScannermột nơi nào đó trong $ PATH.
JDD

2

Giả sử không có tệp nào khác /User/Desktop/project/internetScanner/cần thiết, nếu bạn muốn cài đặt cho một người dùng, liên kết ( ln -s) main.pyđến $HOME/bin/internetScanner. Có lẽ bạn sẽ cần mkdir $HOME/bintrước.

Lần tới khi bạn đăng nhập, $HOME/bincó thể sẽ được thêm vào PATH của bạn. Nếu bạn muốn nó có sẵn cho tất cả người dùng, hãy sao chép nó vào /usr/local/bin.

Nếu nó phải thực thi /User/Desktop/project/internetScanner/, bắt đầu bằng cách nhập osvà gọi

os.chdir('/User/Desktop/project/internetScanner/') 

hoặc tạo một tập lệnh launcher trong $HOME/binhoặc /usr/local/binthay đổi /User/Desktop/project/internetScanner/và thực thi tập lệnh.


0

Đặt alias internetScanner "python /User/Desktop/project/internetScanner/main.py"tệp .aliases (cho csh). Đối với bash, hãy đặt alias internetScanner="python /User/Desktop/project/internetScanner/main.py".bashrc. Sau đó, bạn có thể sử dụng internetScanner bắt đầu từ bất cứ đâu.


Tôi chưa bao giờ nghe nói về một .aliasestập tin. Đó có phải là một cái gì đó tiêu chuẩn cho Bash? hoặc bạn phải rõ ràng nguồn nó trong của bạn .bashrc?
Kazark
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.