Thực thi các chương trình bên ngoài hoặc chạy lệnh hệ thống hoặc trình bao từ tập lệnh Python của chúng tôi có thể hữu ích trong nhiều tình huống. Thay vì điều hướng qua lại giữa thiết bị đầu cuối và IDE, chúng ta có thể chạy trực tiếp các lệnh từ mã Python của mình
Trong hướng dẫn này, chúng ta sẽ tìm hiểu về mô-đun os và mô-đun quy trình con, đồng thời xem cách chạy các lệnh hệ thống bằng cách sử dụng chúng
Thực thi lệnh hệ thống bằng Python os Module
Mô-đun os cung cấp cho chúng ta hệ điều hành. system[], có thể được sử dụng để chạy trực tiếp các lệnh hệ thống. Chúng ta chỉ cần truyền lệnh dưới dạng chuỗi cho os. hệ thống[]
Tuy nhiên, đây không phải là cách được khuyến nghị để chạy các lệnh hệ thống. Chúng tôi phải xử lý nhiều thứ theo cách thủ công, chẳng hạn như thoát khỏi các ký tự shell và os. system[] thậm chí sẽ không trả lại đầu ra cho một biến đối tượng. Nó được sử dụng chủ yếu để chạy các lệnh đơn giản
hệ điều hành. system[] chỉ trả về mã thoát sau khi thực hiện lệnh hệ thống. Ví dụ: nếu lệnh được thực hiện thành công, thì mã thoát sẽ là 0
Nếu bạn đang sử dụng IDE, đầu ra của lệnh hệ thống sẽ được in ra bàn điều khiển vì nó được sử dụng làm luồng đầu ra
Xem xét ví dụ sau, nơi chúng tôi nhập mô-đun os lần đầu tiên vì nó chứa hàm system[]. Sau đó chúng tôi chạy một lệnh hệ thống đơn giản. Nếu chúng ta in đầu ra của nó, chúng ta sẽ thấy nó trả về 0, cho biết lệnh đã được thực hiện thành công
import os
# Executing dir command using system[] function
ext_code = os.system['dir']
print["The Exit Code is: ", ext_code]
Đầu ra của đoạn mã trên được hiển thị bên dưới
đầu ra
Volume trong ổ C là Windows
Số sê-ri tập là 9096-B75F
thư mục của C. \Users\Lenovo\PycharmProjects\untitled11
08/07/2021 09. 09 giờ sáng
08/07/2021 09. 09 giờ sáng
08/07/2021 09. 05 giờ sáng. ý tưởng
03/04/2021 06. 24 giờ chiều 2.320 asdadsa. py
03/04/2021 09. 41 giờ sáng 2.639 Netcom. py
04/03/2021 10. 34 giờ sáng 2.027 netcom2. py
08/07/2021 09. 09 giờ sáng 79 netcom3. py
03/04/2021 05. 26 giờ chiều 1.269 rfc. py
02/03/2021 09. 50 giờ sáng venv
5 [Các] tệp 8.334 byte
4 Dir 790.547.144.704 byte miễn phí
Mã Thoát là. 0
Thực thi lệnh hệ thống bằng os. hàm popen[] trong Python
Mô-đun os cũng cung cấp một os. hàm popen[]. Thao tác này sẽ mở một đường dẫn tới dòng lệnh và chúng ta có thể truy cập đầu ra từ Python. Nó trả về một đối tượng mà chúng ta có thể sử dụng để xem đầu vào và đầu ra tiêu chuẩn của lệnh hệ thống
Khi luồng được tạo bằng phương thức này, chúng ta có thể chạy hàm read[] để lấy toàn bộ đầu ra dưới dạng chuỗi
import os
# Executing dir command using popen[] function
pipe = os.popen['dir']
print[pipe.read[]]
đầu ra
Volume trong ổ C là Windows
Số sê-ri tập là 9096-B75F
thư mục của C. \Users\Lenovo\PycharmProjects\untitled11
08/07/2021 09. 09 giờ sáng
08/07/2021 09. 09 giờ sáng
08/07/2021 09. 05 giờ sáng. ý tưởng
03/04/2021 06. 24 giờ chiều 2.320 asdadsa. py
03/04/2021 09. 41 giờ sáng 2.639 Netcom. py
04/03/2021 10. 34 giờ sáng 2.027 netcom2. py
08/07/2021 09. 09 giờ sáng 79 netcom3. py
03/04/2021 05. 26 giờ chiều 1.269 rfc. py
02/03/2021 09. 50 giờ sáng venv
5 [Các] tệp 8.334 byte
4 Dir 790.547.144.704 byte miễn phí
Thực thi Lệnh hệ thống bằng cách sử dụng Mô-đun quy trình con trong Python
Mô-đun quy trình con cung cấp nhiều tùy chọn linh hoạt và bổ sung không có trong mô-đun hệ điều hành. Đây là mô-đun được khuyến nghị sử dụng khi bạn muốn chạy các chương trình hoặc lệnh từ Python
Mô-đun quy trình con có thể tạo hoặc sinh ra các quy trình mới và chúng tôi cũng có thể lấy thiết bị xuất chuẩn, thiết bị xuất chuẩn và thiết bị xuất chuẩn bằng mô-đun này
Lớp Popen của mô-đun quy trình con
Lớp quy trình con Popen có thể được coi là sự thay thế cho os. popen[], nhưng nó phức tạp hơn một chút để sử dụng
Chúng ta cần chuyển lệnh và các đối số của nó ở dạng danh sách tới hàm tạo của nó. Ví dụ: nếu chúng tôi muốn chạy lệnh ls -a -l để liệt kê các tệp và thư mục [bao gồm cả những tệp bị ẩn], chúng tôi sẽ chuyển ["ls", "-a", "-l"] cho
Chúng ta cũng có thể yêu cầu Python lấy đầu ra và các lỗi sau khi chạy lệnh tới một đối tượng hoặc chúng ta có thể ghi nó vào một tệp. Chúng ta cần đặt đối số thiết bị xuất chuẩn và thiết bị xuất chuẩn để làm như vậy
Vượt qua shell=True để chạy lệnh shell hoặc terminal và text=True để nhận đầu ra dưới dạng chuỗi thay vì byte
Có một phương thức giao tiếp [] của lớp Popen có thể được sử dụng để chuyển đầu vào cho lệnh hệ thống. Nó cũng cho phép chúng ta đọc đầu ra và các lỗi được trả về sau khi thực hiện lệnh
Một điều đáng chú ý khác về lớp Popen là nó sẽ không cài đặt toàn bộ chương trình Python và nó không đợi lệnh hệ thống thực thi xong. Chúng ta có thể kiểm tra xem lệnh còn đang thực thi hay không bằng cách sử dụng hàm poll[]. Nó trả về mã thoát nếu lệnh đã hoàn thành;
import subprocess
system_call = subprocess.Popen[["dir"], stdout=subprocess.PIPE, text=True, shell=True]
out, err = system_call.communicate[]
print[out]
Nó sẽ trả về cùng một đầu ra như hình trên
Lưu trữ kết quả đầu ra vào một tệp
Để ghi đầu ra vào một tệp, hãy chạy đoạn mã sau
import subprocess
with open["output.txt", 'w'] as file:
system_call = subprocess.Popen[["dir"], stdout=file, text=True, shell=True]
Thực thi lệnh hệ thống bằng quy trình con. chạy chức năng
Chức năng run[] của mô-đun quy trình con cũng có thể được sử dụng để thực thi các lệnh hệ thống từ các chương trình Python của chúng tôi. Cũng giống như hàm tạo của lớp Popen, chúng ta cần truyền lệnh và các đối số của nó dưới dạng danh sách
Tham số thiết bị xuất chuẩn có thể được sử dụng để hướng đầu ra tới một đối tượng hoặc thậm chí tới một tệp
Đảm bảo sử dụng shell=True, khi chạy lệnh shell hoặc terminal
Đặt text=True sẽ trả về đầu vào và đầu ra tiêu chuẩn dưới dạng chuỗi thay vì byte
import subprocess
# Execute command using run[] function
system_call = subprocess.run[["dir"], stdout=subprocess.PIPE, shell=True, text=True]
print[system_call.stdout]
print["The Exit Code is: ", system_call.returncode]
đầu ra
Volume trong ổ C là Windows
Số sê-ri tập là 9096-B75F
thư mục của C. \Users\Lenovo\PycharmProjects\untitled11
08/07/2021 09. 29 giờ sáng
08/07/2021 09. 29 giờ sáng
08/07/2021 09. 05 giờ sáng. ý tưởng
03/04/2021 06. 24 giờ chiều 2.320 asdadsa. py
03/04/2021 09. 41 giờ sáng 2.639 Netcom. py
04/03/2021 10. 34 giờ sáng 2.027 netcom2. py
08/07/2021 09. 29 giờ sáng 185 netcom3. py
03/04/2021 05. 26 giờ chiều 1.269 rfc. py
02/03/2021 09. 50 giờ sáng venv
5 [Các] tệp 8.440 byte
4 Dir 790.454.452.224 byte miễn phí
Mã Thoát là. 0
Lưu trữ đầu ra vào một tệp
Để lưu trữ đầu ra của lệnh trong một tệp
import subprocess
with open["stdout.txt", 'w'] as file:
system_call = subprocess.run[["dir"], stdout=file, shell=True, text=True]
Tóm lược
Chạy các lệnh hệ thống và thực thi các chương trình khác từ mã Python của chúng tôi có thể giúp chúng tôi rất nhiều với các tác vụ tự động hóa. Chúng ta có thể chạy chúng bằng cách sử dụng mô-đun os hoặc mô-đun quy trình con của Python. Mô-đun os không được dùng nữa và được thay thế bằng mô-đun quy trình con và mô-đun quy trình con là cách được khuyến nghị để chạy các lệnh hệ thống từ Python. Nó cung cấp rất nhiều tính năng và chức năng bổ sung khi so sánh với mô-đun os. hệ điều hành. Hàm system[] chỉ trả về mã thoát sau khi chạy lệnh, nhưng quy trình con trả về đối tượng và chúng ta có thể trích xuất đầu ra và lỗi từ đối tượng này