Hướng dẫn python run command and get output - python chạy lệnh và nhận đầu ra
Trong tất cả các phiên bản Python được duy trì chính thức, cách tiếp cận đơn giản nhất là sử dụng hàm 3: Show
4 chạy một chương trình duy nhất lấy các đối số làm đầu vào.1 Nó trả về kết quả chính xác như được in thành 5. Nếu bạn cần ghi đầu vào vào 6, hãy bỏ qua các phần 7 hoặc 8. Nếu bạn muốn thực thi các lệnh shell phức tạp, hãy xem ghi chú trên 9 khi kết thúc câu trả lời này.Hàm 4 hoạt động trong tất cả các phiên bản Python được duy trì chính thức. Nhưng đối với các phiên bản gần đây, một cách tiếp cận linh hoạt hơn có sẵn.Các phiên bản hiện đại của Python (3,5 trở lên): >>> import subprocess >>> result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE) >>> result.stdout b'total 0\n-rw-r--r-- 1 memyself staff 0 Mar 14 11:04 files\n' 7Nếu bạn đang sử dụng Python 3.5+ và không cần tương thích ngược, chức năng 7 mới được khuyến nghị bởi tài liệu chính thức cho hầu hết các nhiệm vụ. Nó cung cấp một API cấp cao, rất chung cho mô-đun 3. Để ghi lại đầu ra của chương trình, hãy chuyển cờ 4 đến đối số từ khóa 5. Sau đó truy cập thuộc tính 5 của đối tượng 7 đã trả về:Python 3.5+, and do not need backwards compatibility, the new
7 function is recommended by the official documentation for most tasks. It provides a very general, high-level API for the 3 module. To capture the output of a program, pass the 4 flag to the 5 keyword argument. Then access the 5 attribute of
the returned 7 object:
Giá trị trả về là một đối tượng 8, vì vậy nếu bạn muốn một chuỗi phù hợp, bạn sẽ cần phải 9. Giả sử quy trình được gọi trả về chuỗi được mã hóa UTF-8:
Tất cả điều này có thể được nén thành một lớp lót nếu muốn:
Nếu bạn muốn chuyển đầu vào cho 6 của quy trình, bạn có thể chuyển đối tượng 8 cho đối số từ khóa 2:
Bạn có thể nắm bắt lỗi bằng cách truyền 3 (nắm bắt đến 4) hoặc 5 (nắm bắt đến 6 cùng với đầu ra thông thường). Nếu bạn muốn 7 ném một ngoại lệ khi quá trình trả về mã thoát khác không, bạn có thể vượt qua 8. .Các phiên bản sau của Python hợp lý hóa ở trên hơn nữa. Trong Python 3.7+, có thể đánh vần một lớp trên như thế này:
Sử dụng 7 theo cách này chỉ thêm một chút phức tạp, so với cách làm việc cũ. Nhưng bây giờ bạn có thể làm hầu hết mọi thứ bạn cần làm với chức năng 7.Các phiên bản cũ của Python (3-3.4): Thêm về >>> import subprocess >>> result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE) >>> result.stdout b'total 0\n-rw-r--r-- 1 memyself staff 0 Mar 14 11:04 files\n' 4Nếu bạn đang sử dụng phiên bản Python cũ hơn hoặc cần khả năng tương thích ngược khiêm tốn, bạn có thể sử dụng chức năng 4 như được mô tả ngắn gọn ở trên. Nó đã có sẵn kể từ Python 2.7.
Phải mất các đối số tương tự như 8 (xem bên dưới) và trả về một chuỗi chứa đầu ra của chương trình. Sự khởi đầu của câu trả lời này có một ví dụ sử dụng chi tiết hơn. Trong Python 3.5+, 4 tương đương với việc thực thi 7 với 8 và 0 và chỉ trả về thuộc tính 5.Bạn có thể vượt qua 5 để đảm bảo rằng các thông báo lỗi được bao gồm trong đầu ra trả về. Khi bảo mật không phải là một mối quan tâm, bạn cũng có thể chạy các lệnh shell phức tạp hơn bằng cách vượt qua 9 như được mô tả ở cuối câu trả lời này.Nếu bạn cần phải từ 4 hoặc chuyển đầu vào cho quy trình, 4 sẽ không tùy thuộc vào nhiệm vụ. Xem các ví dụ 8 dưới đây trong trường hợp đó.Các ứng dụng phức tạp và phiên bản di sản của Python (2.6 trở xuống): >>> import subprocess >>> result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE) >>> result.stdout b'total 0\n-rw-r--r-- 1 memyself staff 0 Mar 14 11:04 files\n' 8Nếu bạn cần khả năng tương thích ngược sâu hoặc nếu bạn cần chức năng tinh vi hơn 4 hoặc 7 cung cấp, bạn sẽ phải làm việc trực tiếp với các đối tượng 8, gói gọn API cấp thấp cho các quy trình con.Trình xây dựng 8 chấp nhận một lệnh duy nhất mà không có đối số hoặc danh sách chứa lệnh là mục đầu tiên của nó, theo sau là bất kỳ số lượng đối số nào, mỗi mục là một mục riêng biệt trong danh sách. 2 có thể giúp phân tích các chuỗi vào các danh sách được định dạng phù hợp. Các đối tượng 8 cũng chấp nhận một loạt các đối số khác nhau để quản lý IO và cấu hình cấp thấp.a single command without arguments, or a list containing a command as its first item, followed by any number of arguments, each as a separate item in the list. 2 can help parse strings into appropriately formatted lists. 8
objects also accept a host of different arguments for process IO management and low-level configuration.Để gửi đầu vào và đầu ra, 4 hầu như luôn luôn là phương pháp ưa thích. Như trong:
Hoặc
Nếu bạn đặt 5, 4 cũng cho phép bạn truyền dữ liệu cho quy trình thông qua 6:
Lưu ý câu trả lời của Aaron Hall, chỉ ra rằng trên một số hệ thống, bạn có thể cần phải đặt 5, 4 và 6 tất cả thành 1 (hoặc 2) để có được 4 hoạt động.Trong một số trường hợp hiếm hoi, bạn có thể cần chụp đầu ra thời gian thực phức tạp. Câu trả lời của Vartec cho thấy một con đường phía trước, nhưng các phương pháp khác ngoài 4 dễ bị bế tắc nếu không được sử dụng cẩn thận.Như với tất cả các chức năng trên, khi bảo mật không phải là một mối quan tâm, bạn có thể chạy các lệnh shell phức tạp hơn bằng cách vượt qua 9.Ghi chú1. Chạy các lệnh shell: đối số Thông thường, mỗi cuộc gọi đến 7, 4 hoặc hàm tạo 8 thực thi một chương trình duy nhất. Điều đó có nghĩa là không có đường ống kiểu bash lạ mắt. Nếu bạn muốn chạy các lệnh shell phức tạp, bạn có thể vượt qua 9, mà cả ba chức năng đều hỗ trợ. Ví dụ: 0Tuy nhiên, làm điều này làm tăng mối quan tâm an ninh. Nếu bạn đang làm bất cứ điều gì nhiều hơn kịch bản ánh sáng, bạn có thể gọi riêng từng quy trình và chuyển đầu ra từ mỗi đầu vào sang đầu vào, thông qua 1Hoặc 2Sự cám dỗ để kết nối trực tiếp các đường ống là mạnh mẽ; chống lại nó. Nếu không, bạn có thể sẽ thấy bế tắc hoặc phải làm những việc hack như thế này. Lệnh Python cho đầu ra là gì?Cách cơ bản để làm đầu ra là câu lệnh in. Để kết thúc dòng in bằng một dòng mới, thêm một câu lệnh in mà không có bất kỳ đối tượng nào. Điều này sẽ in cho bất kỳ đối tượng nào thực hiện write (), bao gồm các đối tượng tệp.print statement. To end the printed line with a newline, add a print statement without any objects. This will print to any object that implements write(), which includes file objects.
Có một lệnh chạy trong Python?Lệnh chạy () trả về mã thoát của những gì đã được thực thi.Không giống như hệ điều hành.hệ thống (), lưu ý cách xử lý con.chạy () yêu cầu một danh sách các chuỗi làm đầu vào thay vì một chuỗi. returns the exit code of what was executed. Unlike os. system() , note how subprocess. run() requires a list of strings as input instead of a single string. |