Hướng dẫn run shell script from python with arguments - chạy tập lệnh shell từ python với các đối số
Vấn đề là với 8. Hoặc xóa đối số đó hoặc chuyển tất cả các đối số dưới dạng chuỗi, như sau: Show
Vỏ sẽ chỉ chuyển các đối số mà bạn cung cấp trong đối số đầu tiên của 9 cho quá trình này, vì nó thực hiện cách giải thích của chính các đối số. Xem một câu hỏi tương tự được trả lời ở đây. Điều thực sự xảy ra là tập lệnh shell của bạn không có đối số, vì vậy $ 1 và $ 2 trống.Popen sẽ kế thừa stdout và stderr từ tập lệnh Python, vì vậy thường không cần phải cung cấp các đối số 0 và 1 cho popen (trừ khi bạn chạy tập lệnh với chuyển hướng đầu ra, chẳng hạn như 2). Bạn chỉ nên làm điều này nếu bạn cần đọc đầu ra bên trong tập lệnh Python và thao tác bằng cách nào đó.Nếu tất cả những gì bạn cần là có được đầu ra (và không ngại chạy đồng bộ), tôi khuyên bạn nên thử 3, vì nó dễ dàng nhận được đầu ra hơn 9:
Lưu ý rằng 3 và 6 có các quy tắc tương tự cho đối số 7 là 9. Giới thiệuNhiệm vụ lặp đi lặp lại là chín muồi cho tự động hóa. Thông thường các nhà phát triển và quản trị viên hệ thống tự động hóa các tác vụ thường xuyên như kiểm tra sức khỏe và lưu trữ lại với các tập lệnh shell. Tuy nhiên, khi những nhiệm vụ đó trở nên phức tạp hơn, các kịch bản shell có thể trở nên khó duy trì hơn. May mắn thay, chúng ta có thể sử dụng Python thay vì các tập lệnh shell để 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 tương tự của các tập lệnh shells đó. Học cách chạy các lệnh shell trong Python mở ra cánh cửa cho chúng tôi để 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 tôi sẽ xem xét các cách khác nhau để thực thi các 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 OS.System để chạy lệnhPython cho phép chúng tôi thực hiện ngay một lệnh shell được lưu trữ trong một chuỗi bằng hàm 9.Hãy bắt đầu bằng cách tạo một tệp Python mới có tên là 0 và nhập như sau:
Điều đầu tiên chúng tôi làm trong tệp Python của chúng tôi là nhập mô -đun 1, chứa hàm 2 có thể thực thi các lệnh shell. Dòng tiếp theo thực hiện chính xác điều đó, chạy lệnh 3 trong vỏ của chúng tôi thông qua Python.Trong thiết bị đầu cuối 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:
Khi các lệnh 3 in cho 5 của chúng tôi, 9 cũng hiển thị đầu ra trên luồng 5 của chúng tôi. Mặc dù không hiển thị trong bảng điều khiển, lệnh 9 trả về mã thoát của lệnh shell. Mã thoát 0 có nghĩa là nó đã chạy mà không có bất kỳ vấn đề nào và bất kỳ số nào khác có nghĩa là lỗi.Chúng ta hãy tạo một tệp mới có tên 9 và nhập như sau:
Trong tập lệnh này, chúng tôi tạo hai biến lưu trữ kết quả thực thi các lệnh thay đổi thư mục thành thư mục gia đình và vào một thư mục không tồn tại. Chạy tệp này, chúng ta sẽ thấy:
Lệnh đầu tiên, thay đổi thư mục thành thư mục nhà, thực thi thành công. Do đó, 9 trả về mã thoát của nó, bằng không, được lưu trữ trong 1. Mặt khác, 2 lưu trữ mã thoát của lệnh bash thất bại để thay đổi thư mục thành một thư mục không tồn tại.Hàm 9 thực thi lệnh, in bất kỳ đầu ra nào của lệnh vào bảng đ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 hạt mịn hơn của đầu vào và đầu ra của lệnh shell trong Python, chúng ta nên sử dụng mô -đun 4.Chạy một lệnh với quy trình conMô -đun phụ là cách khuyến nghị của Python để thực thi các lệnh shell. Nó cho chúng ta sự linh hoạt để triệt tiêu đầu ra của các lệnh shell hoặc đầu vào chuỗi và đầu ra của các lệnh khác nhau lại với nhau, trong khi vẫn cung cấp trải nghiệm tương tự với 9 cho các trường hợp sử dụng cơ bản.Trong một tệp mới được gọi là 6, hãy viết mã sau:
Trong dòng đầu tiên, chúng tôi nhập mô -đun 4, là một phần của thư viện tiêu chuẩn Python. Sau đó, chúng tôi sử dụng hàm 8 để thực thi lệnh. Giống như 9, lệnh 8 trả về mã thoát của những gì được thực thi.Không giống như 9, lưu ý cách 8 yêu cầu một 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ác cờ và các đối số của lệnh.Lưu ý: Theo nguyên tắc thông thường, bạn cần tách các đối số dựa trên không gian, ví dụ 3 would be 4, while 5, would be 6. As another example, 7 would be 8, whereas 9 or 0 would be 1.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ư:
Bây giờ chúng ta hãy cố gắng sử dụng một trong các tính năng nâng cao hơn của 8, cụ thể là bỏ qua đầu ra thành 5. Trong cùng một tệp 6, thay đổi:
Với điều này:
Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó! Đầu ra tiêu chuẩn của lệnh bây giờ có đường dẫn đến thiết bị 5 đặ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 hiện tệp trong vỏ của bạn để xem đầu ra sau: 0Điều gì sẽ xảy ra nếu chúng ta muốn cung cấp đầu vào cho một lệnh? 8 tạo điều kiện cho điều này bằng đối số 7 của nó. Tạo một tệp mới có tên 8, gõ các mục sau: 1Chúng tôi sử dụng 8 với khá nhiều lệnh, hãy đi qua chúng:
Chạy tệp này tạo ra đầu ra sau: 2Chúng tôi cũng có thể tăng 6 mà không cần kiểm tra thủ công giá trị trả lại. Trong một tệp mới, 7, thêm mã bên dưới: 3Trong thiết bị đầu cuối của bạn, chạy tập tin này. Bạn sẽ thấy lỗi sau: 4Bằng cách sử dụng 8, chúng tôi bảo Python nêu 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 9 trên dòng cuối cùng không được thực thi.Hàm 8 mang đến cho chúng ta sự linh hoạt to lớn mà 9 không khi thực hiện các lệnh shell. Hàm này là một sự trừu tượng hóa đơn giản hóa của lớp 2, cung cấp chức năng bổ sung mà chúng ta có thể khám phá.Chạy một lệnh với popenLớp 2 hiển thị nhiều tùy chọn hơn cho nhà phát triển khi tương tác với vỏ. Tuy nhiên, chúng ta cần rõ ràng hơn về việc truy xuất kết quả và lỗi.Theo mặc định, 2 không ngừng xử lý chương trình Python nếu lệnh của nó chưa hoàn thành thực thi. Trong một tệp mới có tên là 5, nhập như sau: 5Mã này tương đương với mã 6. Nó chạy một lệnh bằng cách sử dụng 2 và chờ 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 tôi không muốn chờ lệnh Shell của chúng tôi hoàn thành việc thực thi để chương trình có thể làm việc với những thứ khác. Làm thế nào nó sẽ biết khi lệnh shell đã hoàn thành thực thi? Phương thức 8 trả về mã thoát nếu một lệnh đã chạy xong hoặc 9 nếu nó vẫn đang thực thi. Ví dụ: nếu chúng tôi muốn kiểm tra xem 0 đã hoàn tất thay vì chờ nó, chúng tôi sẽ có dòng mã sau: 6Để quản lý đầu vào và đầu ra với 2, chúng ta cần sử dụng phương thức 2.Trong một tệp mới có tên 3, hãy thêm đoạn mã sau: 7Phương thức 2 có một đối số 7 được sử dụng để chuyển đầu vào cho lệnh shell. Phương pháp 6 cũng trả về cả 5 và 3 khi chúng được đặt.Đã thấy những ý tưởng cốt lõi đằng sau 2, giờ đây chúng tôi đã đề cập đến ba cách để chạy các lệnh shell trong Python. Hãy kiểm tra lại các đặc điểm của họ để chúng tôi biết phương pháp nào phù hợp nhất cho các 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 bận tâm nếu đầu ra của chúng đi vào bảng điều khiển, bạn có thể sử dụng lệnh 9. 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 8. 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ó được thực thi, hãy sử dụng 2.Dưới đây là một bảng với một số khác biệt về khả năng sử dụng mà bạn cũng có thể sử dụng để thông báo cho quyết định của mình:
Giá trị trả vềsự vật Sự kết luận Làm cách nào để chạy kịch bản shell trong Python?Nếu bạn cần thực hiện lệnh shell bằng python, có hai cách. Bạn có thể sử dụng mô -đun phụ hoặc hàm RunShellCommand (). Tùy chọn đầu tiên dễ dàng hơn để chạy một dòng mã và sau đó thoát, nhưng nó không linh hoạt khi sử dụng các đối số hoặc tạo ra đầu ra văn bản.use the subprocess module or the RunShellCommand() function. The first option is easier to run one line of code and then exit, but it isn't as flexible when using arguments or producing text output.
Shell Script có thể chấp nhận các đối số không?Thông qua các lập luận.Khả năng chuyển các đối số cho tập lệnh mang lại các tính năng động cho các tập lệnh.Trong kịch bản shell, các đối số được cung cấp cho tập lệnh tại thời điểm thực thi/chạy lệnh.the arguments are provided to the script at the time of execution/running of the command.
Làm cách nào để chạy tập lệnh shell từ các đối số dòng lệnh?Để chuyển một đối số cho tập lệnh bash của bạn, bạn chỉ cần viết nó theo tên của tập lệnh của bạn:.. ./script.sh my_argument .. #!/usr/bin/env bash..... ./script.sh..... ./fruit.sh quả táo cam..... #!/usr/bin/env bash..... ./fruit.sh quả táo cam..... © Wellcome Genome Campus Các khóa học nâng cao và hội nghị khoa học .. Làm thế nào để bạn chạy một đối số trong tập lệnh Python?Bạn có thể sử dụng các đối số dòng lệnh bằng cách sử dụng mảng sys.argv [].Chỉ mục đầu tiên của mảng bao gồm tên tệp tập lệnh Python.Và từ vị trí thứ hai, bạn sẽ có các đối số dòng lệnh được truyền trong khi chạy tập lệnh Python.by using the sys. argv[] array. The first index of the array consists of the python script file name. And from the second position, you'll have the command line arguments passed while running the python script. |