Tập lệnh python trả về giá trị cho shell

Đối số tùy chọn arg có thể là một số nguyên cho biết trạng thái thoát (mặc định là 0) hoặc một loại đối tượng khác. Nếu nó là một số nguyên, số 0 được coi là "kết thúc thành công" và bất kỳ giá trị khác 0 nào được coi là "kết thúc bất thường" bởi shell và những thứ tương tự. Hầu hết các hệ thống yêu cầu nó nằm trong phạm vi 0-127 và tạo ra kết quả không xác định nếu không

Ngoài ra, để truy xuất giá trị trả về của chương trình được thực thi cuối cùng, bạn có thể sử dụng phương thức $?

Dù sao nếu bạn đặt một chuỗi là arg trong sys. exit() nó sẽ được in ở cuối đầu ra chương trình của bạn trong một dòng riêng biệt, để bạn có thể truy xuất nó chỉ bằng một chút phân tích cú pháp. Như một ví dụ xem xét điều này

Các nhiệm vụ lặp đi lặp lại đã chín muồi để tự động hóa. Các nhà phát triển và quản trị viên hệ thống thường tự động hóa các tác vụ thông thường như kiểm tra tình trạng và sao lưu tệp bằng tập lệnh shell. Tuy nhiên, khi các tác vụ đó trở nên phức tạp hơn, các tập lệnh shell có thể trở nên khó bảo trì hơn

May mắn thay, chúng ta có thể sử dụng Python thay vì shell script để tự động hóa. Python cung cấp các phương thức để chạy các lệnh shell, cung cấp cho chúng ta chức năng giống như các tập lệnh shell đó. Học cách chạy các lệnh shell trong Python mở ra cơ hội để chúng ta tự động hóa các tác vụ máy tính theo cách có cấu trúc và có thể mở rộng

Trong bài viết này, chúng ta sẽ xem xét các cách khác nhau để thực thi lệnh shell trong Python và tình huống lý tưởng để sử dụng từng phương thức

Sử dụng hệ điều hành. hệ thống để chạy một lệnh

Python cho phép chúng ta thực thi ngay một lệnh shell được lưu trữ trong một chuỗi bằng cách sử dụng hàm $ python3 echo_adelle.py Hello from the other side! 5

Hãy bắt đầu bằng cách tạo một tệp Python mới có tên là $ python3 echo_adelle.py Hello from the other side! 6 và nhập thông tin sau

import os os.system("echo Hello from the other side!")

Điều đầu tiên chúng tôi làm trong tệp Python của mình là nhập mô-đun $ python3 echo_adelle.py Hello from the other side! 7, chứa hàm $ python3 echo_adelle.py Hello from the other side! 8 có thể thực thi các lệnh trình bao. Dòng tiếp theo thực hiện chính xác điều đó, chạy lệnh $ python3 echo_adelle.py Hello from the other side! 9 trong trình bao của chúng tôi thông qua Python

Trong Terminal của bạn, hãy chạy tệp này bằng cách sử dụng lệnh sau và bạn sẽ thấy đầu ra tương ứng

$ python3 echo_adelle.py Hello from the other side!

Khi các lệnh $ python3 echo_adelle.py Hello from the other side! 9 in tới import os home_dir = os.system("cd ~") print("`cd ~` ran with exit code %d" % home_dir) unknown_dir = os.system("cd doesnotexist") print("`cd doesnotexis` ran with exit code %d" % unknown_dir) 1 của chúng tôi, thì $ python3 echo_adelle.py Hello from the other side! 5 cũng hiển thị đầu ra trên luồng import os home_dir = os.system("cd ~") print("`cd ~` ran with exit code %d" % home_dir) unknown_dir = os.system("cd doesnotexist") print("`cd doesnotexis` ran with exit code %d" % unknown_dir) 1 của chúng tôi. Mặc dù không hiển thị trong bảng điều khiển, nhưng lệnh $ python3 echo_adelle.py Hello from the other side! 5 trả về mã thoát của lệnh shell. Mã thoát bằng 0 có nghĩa là nó chạy mà không có bất kỳ sự cố nào và bất kỳ số nào khác có nghĩa là có lỗi

Hãy tạo một tệp mới có tên là import os home_dir = os.system("cd ~") print("`cd ~` ran with exit code %d" % home_dir) unknown_dir = os.system("cd doesnotexist") print("`cd doesnotexis` ran with exit code %d" % unknown_dir) 5 và nhập nội dung sau

________số 8

Trong tập lệnh này, chúng tôi tạo hai biến lưu trữ kết quả thực hiện các lệnh thay đổi thư mục thành thư mục chính và thư mục không tồn tại. Chạy file này ta sẽ thấy

$ python3 echo_adelle.py Hello from the other side! 4

Lệnh đầu tiên, thay đổi thư mục thành thư mục chính, thực hiện thành công. Do đó, $ python3 echo_adelle.py Hello from the other side! 5 trả về mã thoát của nó, số 0, được lưu trữ trong import os home_dir = os.system("cd ~") print("`cd ~` ran with exit code %d" % home_dir) unknown_dir = os.system("cd doesnotexist") print("`cd doesnotexis` ran with exit code %d" % unknown_dir) 7. Mặt khác, import os home_dir = os.system("cd ~") print("`cd ~` ran with exit code %d" % home_dir) unknown_dir = os.system("cd doesnotexist") print("`cd doesnotexis` ran with exit code %d" % unknown_dir) 8 lưu trữ mã thoát của lệnh bash không thành công để thay đổi thư mục thành thư mục không tồn tại

Hàm $ python3 echo_adelle.py Hello from the other side! 5 thực thi một lệnh, in bất kỳ đầu ra nào của lệnh ra bàn điều khiển và trả về mã thoát của lệnh. Nếu chúng ta muốn kiểm soát chi tiết hơn đối với đầu vào và đầu ra của lệnh shell trong Python, chúng ta nên sử dụng mô-đun ________ 140

Chạy một lệnh với quy trình con

Mô-đun quy trình con là cách được đề xuất của Python để thực thi các lệnh shell. Nó cho phép chúng tôi linh hoạt để chặn đầu ra của các lệnh shell hoặc xâu chuỗi đầu vào và đầu ra của nhiều lệnh khác nhau, trong khi vẫn cung cấp trải nghiệm tương tự như $ python3 echo_adelle.py Hello from the other side! 5 cho các trường hợp sử dụng cơ bản

Trong một trường mới có tên là ________ 142, hãy viết đoạn mã sau

import os os.system("echo Hello from the other side!") 2

Trong dòng đầu tiên, chúng tôi nhập mô-đun $ python3 echo_adelle.py Hello from the other side! 40, là một phần của thư viện chuẩn Python. Sau đó chúng ta sử dụng hàm $ python3 echo_adelle.py Hello from the other side! 44 để thực hiện lệnh. Giống như $ python3 echo_adelle.py Hello from the other side! 5, lệnh $ python3 echo_adelle.py Hello from the other side! 44 trả về mã thoát của những gì đã được thực thi

Không giống như $ python3 echo_adelle.py Hello from the other side! 5, lưu ý cách $ python3 echo_adelle.py Hello from the other side! 44 yêu cầu danh sách các chuỗi làm đầu vào thay vì một chuỗi. Mục đầu tiên của danh sách là tên của lệnh. Các mục còn lại của danh sách là cờ và đối số của lệnh

Ghi chú. Theo nguyên tắc thông thường, bạn cần phân tách các đối số dựa trên dấu cách, ví dụ $ python3 echo_adelle.py Hello from the other side! 49 sẽ là import os os.system("echo Hello from the other side!") 20, trong khi import os os.system("echo Hello from the other side!") 21 sẽ là import os os.system("echo Hello from the other side!") 22. Một ví dụ khác, import os os.system("echo Hello from the other side!") 23 sẽ là import os os.system("echo Hello from the other side!") 24, trong khi import os os.system("echo Hello from the other side!") 25 hoặc import os os.system("echo Hello from the other side!") 26 sẽ là import os os.system("echo Hello from the other side!") 27

Chạy tệp này và đầu ra của bảng điều khiển của bạn sẽ tương tự như

$ python3 echo_adelle.py Hello from the other side! 8

Bây giờ, hãy thử sử dụng một trong những tính năng nâng cao hơn của $ python3 echo_adelle.py Hello from the other side! 44, cụ thể là bỏ qua đầu ra cho import os home_dir = os.system("cd ~") print("`cd ~` ran with exit code %d" % home_dir) unknown_dir = os.system("cd doesnotexist") print("`cd doesnotexis` ran with exit code %d" % unknown_dir) 1. Trong cùng một tệp $ python3 echo_adelle.py Hello from the other side! 42, thay đổi

$ python3 echo_adelle.py Hello from the other side! 2

để này

$ python3 echo_adelle.py Hello from the other side! 3

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Đầu ra tiêu chuẩn của lệnh hiện chuyển đến thiết bị $ python3 echo_adelle.py Hello from the other side! 81 đặc biệt, có nghĩa là đầu ra sẽ không xuất hiện trên bảng điều khiển của chúng tôi. Thực thi tệp trong trình bao của bạn để xem đầu ra sau

$ python3 echo_adelle.py Hello from the other side! 5

Nếu chúng ta muốn cung cấp đầu vào cho một lệnh thì sao? . Tạo một tệp mới có tên là $ python3 echo_adelle.py Hello from the other side! 84, nhập nội dung sau

Chúng tôi sử dụng $ python3 echo_adelle.py Hello from the other side! 44 với khá nhiều lệnh, hãy xem qua chúng

  • $ python3 echo_adelle.py Hello from the other side! 86 yêu cầu Python chuyển hướng đầu ra của lệnh tới một đối tượng để có thể đọc thủ công sau
  • $ python3 echo_adelle.py Hello from the other side! 87 trả về import os home_dir = os.system("cd ~") print("`cd ~` ran with exit code %d" % home_dir) unknown_dir = os.system("cd doesnotexist") print("`cd doesnotexis` ran with exit code %d" % unknown_dir) 1 và $ python3 echo_adelle.py Hello from the other side! 89 dưới dạng chuỗi. Kiểu trả về mặc định là byte
  • $ python3 echo_adelle.py Hello from the other side! 20 yêu cầu Python thêm chuỗi làm đầu vào cho lệnh $ python3 echo_adelle.py Hello from the other side! 21

Chạy tệp này tạo ra đầu ra sau

$ python3 echo_adelle.py Hello from the other side! 6

Chúng tôi cũng có thể tăng $ python3 echo_adelle.py Hello from the other side! 22 mà không cần kiểm tra giá trị trả về theo cách thủ công. Trong một tệp mới, $ python3 echo_adelle.py Hello from the other side! 23, hãy thêm mã bên dưới

$ python3 echo_adelle.py Hello from the other side! 0

Trong Terminal của bạn, hãy chạy tệp này. Bạn sẽ thấy lỗi sau

$ python3 echo_adelle.py Hello from the other side! 1

Bằng cách sử dụng $ python3 echo_adelle.py Hello from the other side! 24, chúng tôi yêu cầu Python đưa ra bất kỳ ngoại lệ nào nếu gặp lỗi. Vì chúng tôi đã gặp phải lỗi, câu lệnh $ python3 echo_adelle.py Hello from the other side! 25 trên dòng cuối cùng không được thực thi

Hàm $ python3 echo_adelle.py Hello from the other side! 44 mang lại cho chúng ta sự linh hoạt to lớn mà $ python3 echo_adelle.py Hello from the other side! 5 không có khi thực hiện các lệnh shell. Hàm này là sự trừu tượng hóa đơn giản của lớp $ python3 echo_adelle.py Hello from the other side! 28, cung cấp chức năng bổ sung mà chúng ta có thể khám phá

Chạy lệnh với Popen

Lớp $ python3 echo_adelle.py Hello from the other side! 28 hiển thị nhiều tùy chọn hơn cho nhà phát triển khi tương tác với trình bao. Tuy nhiên, chúng ta cần nói rõ hơn về truy xuất kết quả và lỗi

Theo mặc định, $ python3 echo_adelle.py Hello from the other side! 28 không dừng xử lý chương trình Python nếu lệnh của nó chưa thực thi xong. Trong một tệp mới có tên là $ python3 echo_adelle.py Hello from the other side! 31, hãy nhập nội dung sau

$ python3 echo_adelle.py Hello from the other side! 2

Mã này tương đương với mã của $ python3 echo_adelle.py Hello from the other side! 42. Nó chạy một lệnh bằng cách sử dụng $ python3 echo_adelle.py Hello from the other side! 28 và đợi nó hoàn thành trước khi thực hiện phần còn lại của tập lệnh Python

Giả sử chúng ta không muốn đợi lệnh shell của mình thực thi xong để chương trình có thể làm việc trên những thứ khác. Làm sao nó biết khi nào lệnh shell đã thực thi xong?

Phương thức $ python3 echo_adelle.py Hello from the other side! 34 trả về mã thoát nếu một lệnh đã chạy xong hoặc $ python3 echo_adelle.py Hello from the other side! 35 nếu nó vẫn đang thực thi. Ví dụ: nếu chúng tôi muốn kiểm tra xem $ python3 echo_adelle.py Hello from the other side! 36 đã hoàn tất hay chưa thay vì đợi nó, chúng tôi sẽ có dòng mã sau

$ python3 echo_adelle.py Hello from the other side! 3

Để quản lý đầu vào và đầu ra với $ python3 echo_adelle.py Hello from the other side! 28, chúng ta cần sử dụng phương thức $ python3 echo_adelle.py Hello from the other side! 38

Trong một tệp mới có tên là $ python3 echo_adelle.py Hello from the other side! 39, hãy thêm đoạn mã sau

$ python3 echo_adelle.py Hello from the other side! 4

Phương thức $ python3 echo_adelle.py Hello from the other side! 38 lấy một đối số $ python3 echo_adelle.py Hello from the other side! 83 được sử dụng để truyền đầu vào cho lệnh trình bao. Phương thức $ python3 echo_adelle.py Hello from the other side! 52 cũng trả về cả import os home_dir = os.system("cd ~") print("`cd ~` ran with exit code %d" % home_dir) unknown_dir = os.system("cd doesnotexist") print("`cd doesnotexis` ran with exit code %d" % unknown_dir) 1 và $ python3 echo_adelle.py Hello from the other side! 89 khi chúng được đặt

Sau khi xem xét các ý tưởng cốt lõi đằng sau $ python3 echo_adelle.py Hello from the other side! 28, giờ đây chúng ta đã đề cập đến ba cách để chạy các lệnh shell trong Python. Cùng kiểm tra lại các đặc điểm của chúng để biết phương pháp nào phù hợp nhất với yêu cầu của dự án

Tôi nên sử dụng cái nào?

Nếu bạn cần chạy một hoặc một vài lệnh đơn giản và không phiền nếu đầu ra của chúng được chuyển đến bàn điều khiển, bạn có thể sử dụng lệnh $ python3 echo_adelle.py Hello from the other side! 5. Nếu bạn muốn quản lý đầu vào và đầu ra của lệnh shell, hãy sử dụng $ python3 echo_adelle.py Hello from the other side! 44. Nếu bạn muốn chạy một lệnh và tiếp tục thực hiện công việc khác trong khi nó đang được thực thi, hãy sử dụng $ python3 echo_adelle.py Hello from the other side! 28

Đây là bảng có một số khác biệt về khả năng sử dụng mà bạn cũng có thể sử dụng để đưa ra quyết định của mình

hệ điều hành. quy trình hệ thống. runsub process. PopenYêu cầu đối số được phân tích cú phápnoyesyesĐợi lệnhyesyesnoGiao tiếp với stdin và stdoutnoyesyesReturnsreturn valueobjectobject

Sự kết luận

Python cho phép bạn thực thi các lệnh shell mà bạn có thể sử dụng để khởi động các chương trình khác hoặc quản lý tốt hơn các tập lệnh shell mà bạn sử dụng để tự động hóa. Tùy thuộc vào trường hợp sử dụng của chúng tôi, chúng tôi có thể sử dụng $ python3 echo_adelle.py Hello from the other side! 5, $ python3 echo_adelle.py Hello from the other side! 44 hoặc $ python3 echo_adelle.py Hello from the other side! 28 để chạy các lệnh bash

Chúng ta có thể quay lại tập lệnh shell không?

lệnh return được sử dụng để thoát khỏi hàm shell . Nó nhận một tham số [N], nếu N được đề cập thì nó trả về [N] và nếu N không được đề cập thì nó trả về trạng thái của lệnh cuối cùng được thực thi trong hàm hoặc tập lệnh.

'$' trong vỏ là gì?

Khóa học lệnh Unix cho người mới bắt đầu . Ví dụ: ký tự $ đại diện cho số ID tiến trình hoặc PID của trình bao hiện tại − $echo $$

$1 trong shell script là gì?

$1 - Đối số đầu tiên được gửi tới tập lệnh . $2 - Đối số thứ hai được gửi tới tập lệnh. $3 - Đối số thứ ba. và kể từ đó trở đi. $# - Số đối số được cung cấp.

%% Bash trong Python là gì?

Shell Bourne-Again (mã nguồn), hầu như luôn được gọi đơn giản là "Bash", diễn giải và thực thi đầu vào được nhập từ một nguồn chẳng hạn như người dùng hoặc chương trình< . Bash là một triển khai của khái niệm shell và thường được sử dụng trong quá trình phát triển phần mềm Python như một phần của môi trường phát triển của lập trình viên. . Bash is an implementation of the shell concept and is often used during Python software development as part of a programmer's development environment.

Chủ đề