Linux là một trong những hệ điều hành phổ biến nhất được sử dụng bởi các nhà phát triển phần mềm và quản trị viên hệ thống. Nó là nguồn mở, miễn phí, có thể tùy chỉnh, rất mạnh mẽ và thích nghi. Làm cho nó trở thành một lựa chọn lý tưởng cho máy chủ, máy ảo [VM] và nhiều trường hợp sử dụng khác.
Do đó, điều cần thiết là bất kỳ ai làm việc trong ngành công nghệ để biết cách làm việc với Linux vì nó được sử dụng ở hầu hết mọi nơi. Trong hướng dẫn này, chúng ta sẽ xem xét cách chúng ta có thể tự động hóa và chạy các lệnh Linux trong Python.
Mục lục
- Điều kiện tiên quyết
- Giới thiệu
- Xây dựng ứng dụng cho máy chủ Ping
- Mã số
- Sự kết luận
Điều kiện tiên quyết
- Giới thiệu
- Xây dựng ứng dụng cho máy chủ Ping
Giới thiệu
Xây dựng ứng dụng cho máy chủ Ping
Mã số
import os
cmd = 'ls -l'
os.system[cmd]
Sự kết luận
Hiểu biết cơ bản về Linux và kịch bản shell.
Một cách tiếp cận ngây thơ sẽ là sử dụng thư viện os : | Hàm os.system[] cho phép người dùng thực thi các lệnh trong Python. Chương trình trên liệt kê tất cả các tệp bên trong một thư mục. Tuy nhiên, chúng ta có thể đọc và phân tích đầu ra của lệnh. |
Trong một số lệnh, bắt buộc phải đọc đầu ra và phân tích nó. Thư viện subprocess cung cấp cách tiếp cận tốt hơn, an toàn hơn và nhanh hơn cho việc này và cho phép chúng tôi xem và phân tích đầu ra của các lệnh. | Hệ điều hành |
quá trình phụ | Chức năng hệ điều hành đã được không dùng nữa. Nói cách khác, chức năng này đã được thay thế. |
Mô -đun phụ đóng vai trò thay thế cho điều này và Python chính thức khuyến nghị sử dụng quy trình phụ cho các lệnh shell.
OS.System trực tiếp thực thi các lệnh shell và dễ bị tổn thương.
Mô -đun phụ vượt qua các lỗ hổng này và an toàn hơn.
Chức năng hệ điều hành chỉ cần chạy lệnh shell và chỉ trả về mã trạng thái của lệnh đó.
Mã số
Sự kết luận
Hiểu biết cơ bản về Linux và kịch bản shell.
Kỹ năng lập trình cơ bản trong Python.
Python có một bộ thư viện phong phú cho phép chúng tôi thực thi các lệnh shell.
import subprocess
def ping[servers]:
# The command you want to execute
cmd = 'ping'
# send one packet of data to the host
# this is specified by '-c 1' in the argument list
outputlist = []
# Iterate over all the servers in the list and ping each server
for server in servers:
temp = subprocess.Popen[[cmd, '-c 1', server], stdout = subprocess.PIPE]
# get the output as a string
output = str[temp.communicate[]]
# store the output in the list
outputlist.append[output]
return outputlist
if __name__ == '__main__':
# Get the list of servers from the text file
servers = list[open['servers.txt']]
# Iterate over all the servers that we read from the text file
# and remove all the extra lines. This is just a preprocessing step
# to make sure there aren't any unnecessary lines.
for i in range[len[servers]]:
servers[i] = servers[i].strip['\n']
outputlist = ping[servers]
# Uncomment the following lines to print the output of successful servers
# print[outputlist]
Một cách tiếp cận ngây thơ sẽ là sử dụng thư viện os
:
Hàm os.system[]
cho phép người dùng thực thi các lệnh trong Python. Chương trình trên liệt kê tất cả các tệp bên trong một thư mục. Tuy nhiên, chúng ta có thể đọc và phân tích đầu ra của lệnh.
Trong một số lệnh, bắt buộc phải đọc đầu ra và phân tích nó. Thư viện subprocess
cung cấp cách tiếp cận tốt hơn, an toàn hơn và nhanh hơn cho việc này và cho phép chúng tôi xem và phân tích đầu ra của các lệnh.
Hệ điều hành
Đối số
9 là tùy chọn và có thể được sử dụng để đặt nơi bạn muốnimport subprocess def ping[servers]: # The command you want to execute cmd = 'ping' # send one packet of data to the host # this is specified by '-c 1' in the argument list outputlist = [] # Iterate over all the servers in the list and ping each server for server in servers: temp = subprocess.Popen[[cmd, '-c 1', server], stdout = subprocess.PIPE] # get the output as a string output = str[temp.communicate[]] # store the output in the list outputlist.append[output] return outputlist if __name__ == '__main__': # Get the list of servers from the text file servers = list[open['servers.txt']] # Iterate over all the servers that we read from the text file # and remove all the extra lines. This is just a preprocessing step # to make sure there aren't any unnecessary lines. for i in range[len[servers]]: servers[i] = servers[i].strip['\n'] outputlist = ping[servers] # Uncomment the following lines to print the output of successful servers # print[outputlist]
subprocess
hiển thị đầu ra. Theo mặc định, đầu ra được gửi đến thiết bị đầu cuối. Tuy nhiên, nếu bạn không muốn đổ đầu ra lớn vào thiết bị đầu cuối, bạn có thể sử dụngos
1 để gửi đầu ra của một lệnh sang lệnh tiếp theo. Điều này tương ứng với tùy chọnos
2 trong Linux.Đối số
os
3 cũng là tùy chọn và được sử dụng để đặt nơi bạn muốn các lỗi được hiển thị. Theo mặc định, nó gửi các lỗi đến thiết bị đầu cuối. Vì chúng tôi cần có được một danh sách các máy chủ không thể đạt được, chúng tôi không cần phải thay đổi điều này. Các máy chủ không thể đạt được [lỗi] sẽ được hiển thị cho chúng tôi trên thiết bị đầu cuối.
Đầu ra của lệnh được lưu trữ trong một biến gọi là os
4. Hàm os
5 cho phép chúng tôi đọc đầu ra và hàm os
6 có thể được sử dụng để chuyển đổi nó thành một chuỗi. Khi chúng ta nhận được đầu ra, chúng ta có thể phân tích nó để chỉ trích xuất các chi tiết thiết yếu hoặc chỉ hiển thị nó như hiện tại. Trong ví dụ này, tôi đang lưu trữ đầu ra trong danh sách để sử dụng trong tương lai.
Sự kết luận
Tóm lại, tự động hóa là một trong những chủ đề nóng nhất trong ngành và hầu hết mọi công ty đang đầu tư số tiền khổng lồ để tự động hóa các nhiệm vụ thủ công khác nhau. Trong hướng dẫn này, chúng tôi đã khám phá quá trình tự động chạy và phân tích các lệnh Linux trên nhiều máy chủ bằng Python.
Một cách cũ để làm điều này là bằng cách sử dụng các tập lệnh shell. Tuy nhiên, sử dụng Python cung cấp cho các nhà phát triển nhiều quyền lực hơn và kiểm soát việc thực thi và đầu ra của các lệnh. Bây giờ bạn đã hiểu những điều cơ bản của việc thực thi các lệnh Linux, bạn có thể tiếp tục và thử nghiệm các lệnh khác nhau và xây dựng các ứng dụng phức tạp và mạnh mẽ hơn.
Đóng góp đánh giá ngang hàng của: Saiharsha Balasubramaniam