Làm cách nào để chạy tập lệnh shell trong python?

Và nếu bạn đang làm việc với Python, thì bạn có thể đã thử tự động hóa mọi thứ. Đó là một cách để tiết kiệm thời gian. Bạn cũng có thể có một số tập lệnh bash để tự động hóa mọi thứ

Python thuận tiện để viết tập lệnh hơn bash. Và việc quản lý tập lệnh Python dễ dàng so với tập lệnh bash. Bạn sẽ thấy khó duy trì các tập lệnh bash khi nó đang phát triển

Nhưng nếu bạn đã có tập lệnh bash mà bạn muốn chạy bằng Python thì sao?

Có cách nào để thực thi lệnh bash và tập lệnh trong Python không?

Vâng, Python có một mô-đun tích hợp được gọi là quy trình con được sử dụng để thực thi các lệnh và tập lệnh bên trong tập lệnh Python. Hãy xem cách thực thi các lệnh bash và tập lệnh trong tập lệnh Python một cách chi tiết

Thực hiện các lệnh Bash

Như bạn có thể đã thấy, quy trình con của mô-đun được sử dụng để thực thi các tập lệnh và lệnh bash. Nó cung cấp các phương thức và lớp khác nhau cho cùng một

Về cơ bản, có một phương thức và một lớp để biết về mô-đun quy trình con. Họ đang chạy và Popen. Hai điều này giúp chúng tôi thực thi các lệnh bash trong tập lệnh Python. Hãy xem từng người một

quy trình con. chạy[]

Phương thức 

import subprocess
subprocess.run[["ls", "-la"]]
3 sẽ lấy một danh sách các chuỗi làm đối số vị trí. Điều này là bắt buộc vì nó có lệnh bash và đối số cho nó. Mục đầu tiên trong danh sách là tên lệnh và các mục còn lại là đối số của lệnh

Hãy xem một ví dụ nhanh

import subprocess
subprocess.run[["ls"]]

Tập lệnh trên liệt kê tất cả các mục trong thư mục làm việc hiện tại dưới dạng tập lệnh nằm. Không có đối số cho lệnh trong tập lệnh trên. Chúng tôi chỉ đưa ra lệnh bash. Chúng ta có thể cung cấp các đối số bổ sung cho lệnh

import subprocess
subprocess.run[["ls", "-la"]]
4 như
import subprocess
subprocess.run[["ls", "-la"]]
5, 
import subprocess
subprocess.run[["ls", "-la"]]
6,
import subprocess
subprocess.run[["ls", "-la"]]
7, v.v.

Hãy xem một ví dụ nhanh với các đối số lệnh

import subprocess
subprocess.run[["ls", "-la"]]

Lệnh trên hiển thị tất cả các tệp bao gồm các tệp ẩn cùng với các quyền. Chúng tôi đã cung cấp đối số

import subprocess
subprocess.run[["ls", "-la"]]
8 hiển thị thông tin bổ sung về tệp và thư mục cũng như tệp ẩn

Cuối cùng, chúng tôi có thể mắc một số lỗi khi viết lệnh. Lỗi sẽ tăng theo lỗi. Điều gì sẽ xảy ra nếu bạn muốn chụp chúng và sử dụng chúng sau này?

Hãy xem một ví dụ

________số 8

Đảm bảo rằng bạn không có tệp có tên mẫu. txt trong thư mục làm việc. Giá trị cho đối số từ khóa stderr là PIPE giúp trả về lỗi trong một đối tượng. Chúng ta có thể truy cập nó sau với cùng tên. Và đối số từ khóa văn bản giúp cho biết rằng đầu ra phải là một chuỗi

Tương tự, chúng ta có thể nắm bắt đầu ra của lệnh bằng cách sử dụng đối số từ khóa stdout

import subprocess
result = subprocess.run[["echo", "Hello, World!"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True]
print[result.stdout]

quy trình con. chạy[] – đầu vào

Bạn có thể cung cấp thông tin đầu vào cho các lệnh bằng cách sử dụng đối số từ khóa đầu vào. Chúng tôi sẽ cung cấp đầu vào ở định dạng chuỗi. Vì vậy, chúng ta cần đặt văn bản đối số từ khóa thành

import subprocess
subprocess.run[["ls", "-la"]]
9. Theo mặc định, nó lấy nó theo byte

Hãy xem một ví dụ

import subprocess
subprocess.run[["ls"]]
1

Trong chương trình trên, tập lệnh Python thêm. py sẽ lấy hai số làm đầu vào. Chúng tôi đã cung cấp thông tin đầu vào cho tập lệnh Python bằng cách sử dụng đối số từ khóa đầu vào

quy trình con. Giáo hoàng []

Lớp quy trình con. Popen[] cao cấp hơn quy trình con của phương thức. chạy[]. Nó cung cấp cho chúng ta nhiều tùy chọn hơn để thực hiện các lệnh. Chúng tôi sẽ tạo một phiên bản của quy trình con. Popen[] và sử dụng nó cho nhiều việc khác nhau như biết trạng thái thực thi lệnh, nhận đầu ra, đưa đầu vào, v.v. ,

Có một số phương thức của quy trình con của lớp. Popen[] mà chúng ta cần biết. Hãy xem từng cái một cùng với các ví dụ mã

Chờ đã

Nó được sử dụng để đợi cho đến khi hoàn thành việc thực thi lệnh. Các dòng tiếp theo của tập lệnh Python sẽ không thực thi cho đến khi hoàn thành lệnh trước đó được viết sau phương thức

import subprocess
result = subprocess.run[["cat", "sample.txt"], stderr=subprocess.PIPE, text=True]
print[result.stderr]
0. Hãy xem ví dụ

import subprocess
subprocess.run[["ls"]]
3

Chạy đoạn mã trên và quan sát đầu ra. Bạn sẽ thấy thông báo Đã hoàn thành. được in trước khi thực hiện lệnh. Chúng ta có thể tránh nó bằng cách sử dụng phương pháp

import subprocess
result = subprocess.run[["cat", "sample.txt"], stderr=subprocess.PIPE, text=True]
print[result.stderr]
0. Hãy đợi cho đến khi hoàn thành lệnh

import subprocess
subprocess.run[["ls"]]
5

Nếu bạn thấy đầu ra của đoạn mã trên, thì bạn sẽ nhận ra rằng

import subprocess
result = subprocess.run[["cat", "sample.txt"], stderr=subprocess.PIPE, text=True]
print[result.stderr]
0 đang thực sự hoạt động. Câu lệnh in được thực hiện sau khi hoàn thành việc thực hiện lệnh

giao tiếp

Phương thức

import subprocess
result = subprocess.run[["cat", "sample.txt"], stderr=subprocess.PIPE, text=True]
print[result.stderr]
3 được sử dụng để lấy đầu ra, lỗi và đưa đầu vào cho lệnh. Nó trả về một tuple chứa đầu ra và lỗi tương ứng. Hãy xem một ví dụ

import subprocess
subprocess.run[["ls"]]
8

quy trình con. Popen[] – đầu vào

Chúng tôi không thể chuyển đầu vào cho lớp

import subprocess
result = subprocess.run[["cat", "sample.txt"], stderr=subprocess.PIPE, text=True]
print[result.stderr]
4 trực tiếp. Chúng ta cần sử dụng đối số từ khóa có tên là stdin để cung cấp đầu vào cho lệnh. Thể hiện của lớp
import subprocess
result = subprocess.run[["cat", "sample.txt"], stderr=subprocess.PIPE, text=True]
print[result.stderr]
4 sẽ cung cấp cho chúng ta đối tượng
import subprocess
result = subprocess.run[["cat", "sample.txt"], stderr=subprocess.PIPE, text=True]
print[result.stderr]
6. Nó có một phương thức gọi là
import subprocess
result = subprocess.run[["cat", "sample.txt"], stderr=subprocess.PIPE, text=True]
print[result.stderr]
7 được sử dụng để cung cấp đầu vào cho lệnh

Như chúng ta đã thảo luận trước đó, theo mặc định, nó sẽ lấy đầu vào là các đối tượng giống như byte. Vì vậy, đừng quên đặt văn bản đối số từ khóa thành

import subprocess
subprocess.run[["ls", "-la"]]
9 trong khi tạo phiên bản của
import subprocess
result = subprocess.run[["cat", "sample.txt"], stderr=subprocess.PIPE, text=True]
print[result.stderr]
4

Hãy xem một ví dụ

import subprocess
subprocess.run[["ls", "-la"]]
5

thăm dò ý kiến

Phương thức

import subprocess
result = subprocess.run[["echo", "Hello, World!"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True]
print[result.stdout]
0 dùng để kiểm tra việc thực hiện lệnh đã hoàn thành hay chưa. Phương thức này sẽ trả về
import subprocess
result = subprocess.run[["echo", "Hello, World!"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True]
print[result.stdout]
1 nếu lệnh vẫn đang thực thi. Hãy xem một ví dụ

import subprocess
subprocess.run[["ls", "-la"]]
8

Trong đoạn mã trên, chúng tôi đã sử dụng lệnh

import subprocess
result = subprocess.run[["echo", "Hello, World!"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True]
print[result.stdout]
2 với 5 yêu cầu. Có một vòng lặp vô tận lặp đi lặp lại cho đến khi hoàn thành việc thực thi lệnh. Chúng tôi đã sử dụng phương thức
import subprocess
result = subprocess.run[["echo", "Hello, World!"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True]
print[result.stdout]
0 để kiểm tra trạng thái thực thi lệnh. Nếu phương thức
import subprocess
result = subprocess.run[["echo", "Hello, World!"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True]
print[result.stdout]
0 trả về mã khác với
import subprocess
result = subprocess.run[["echo", "Hello, World!"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True]
print[result.stdout]
1, thì quá trình thực thi hoàn tất. Và vòng lặp vô tận bị phá vỡ

Thực thi các tập lệnh Bash

Chúng tôi đã thấy hai cách để thực hiện các lệnh. Bây giờ, hãy xem cách thực thi các tập lệnh bash trong tập lệnh Python

Quy trình con có một phương thức được gọi là cuộc gọi. Phương pháp này được sử dụng để thực thi các tập lệnh bash. Phương thức trả về mã thoát từ tập lệnh bash. Mã thoát mặc định cho tập lệnh bash là 0. Hãy xem một ví dụ

Tạo một tập lệnh bash với tên thực hành. như sau

import subprocess
subprocess.run[["ls", "-la"]]
0

Bây giờ, hãy viết một tập lệnh Python thực thi tập lệnh bash ở trên

import subprocess
subprocess.run[["ls", "-la"]]
1

Bạn sẽ nhận được kết quả sau khi chạy tập lệnh Python ở trên

import subprocess
subprocess.run[["ls", "-la"]]
2

Sự kết luận

Chúng ta đã thấy cách thực thi lệnh bash và script trong Python. Bạn có thể sử dụng chúng để tự động hóa mọi thứ hiệu quả hơn

Chủ Đề