Tôi muốn lưu đầu ra của lệnh shell vào một textfile thông qua python. Đây là mã python thực tế, khá cơ bản của tôi:
Chỉnh sửa đây là kịch bản cuối cùng, cảm ơn bạn đã giúp đỡ :) here is the final script, thank you for your help :)
import subprocess ip_adress_4 = 0 pr = open("pointer_record.txt", "w") while (ip_adress_4 < 255): ip_adress_4 = ip_adress_4 + 1 ip_adress = '82.198.205.%d' % (ip_adress_4,) subprocess.Popen("host %s" % ip_adress, stdout=pr, shell=True)Đã hỏi ngày 6 tháng 12 năm 2013 lúc 10:08Dec 6, 2013 at 10:08
Bojack Horsemanbojack HorsemanBoJack Horseman
4.1529 Huy hiệu vàng35 Huy hiệu bạc68 Huy hiệu Đồng9 gold badges35 silver badges68 bronze badges
1
Hãy thử một cái gì đó như thế này:
import subprocess file_ = open("ouput.txt", "w") subprocess.Popen("ls", stdout=file_)Chỉnh sửa: Phù hợp với nhu cầu của bạn: Matching your needs
import subprocess file_ = open("ouput.txt", "w") subprocess.Popen(["host", ipAddress], stdout=file_)Đã trả lời ngày 6 tháng 12 năm 2013 lúc 14:04Dec 6, 2013 at 14:04
Raydel Mirandaraydel MirandaRaydel Miranda
13.4K2 Huy hiệu vàng36 Huy hiệu bạc59 Huy hiệu đồng2 gold badges36 silver badges59 bronze badges
0
Sử dụng import subprocess file_ = open("ouput.txt", "w") subprocess.Popen("ls", stdout=file_) 1 thay vì import subprocess file_ = open("ouput.txt", "w") subprocess.Popen("ls", stdout=file_) 2 sẽ cung cấp cho bạn một chuỗi trở lại chứa đầu ra, sau đó bạn có thể viết ra tệp.
Đã trả lời ngày 6 tháng 12 năm 2013 lúc 10:10Dec 6, 2013 at 10:10
Oliver Matthewsoliver MatthewsOliver Matthews
7.1473 Huy hiệu vàng31 Huy hiệu bạc32 Huy hiệu Đồng3 gold badges31 silver badges32 bronze badges
2
Bạn đang ở đây: Mẹo về nhà/ Linux/ Làm thế nào để chạy lệnh shell từ Python và nhận đầu ra?Home / Linux Tips / How to Run a Shell Command from Python and Get The Output?
Trong Python, thường thì bạn có thể muốn thực thi lệnh Linux và lấy đầu ra của lệnh dưới dạng biến chuỗi. Có nhiều cách để thực hiện lệnh shell và nhận đầu ra bằng Python. Một cách ngây thơ để làm điều đó là thực thi lệnh Linux, lưu đầu ra trong tệp và phân tích tệp.
import os cmd = 'wc -l my_text_file.txt > out_file.txt' os.system(cmd)Nhận đầu ra từ lệnh shell bằng cách sử dụng quy trình con
Một cách tốt hơn để có được đầu ra từ việc thực hiện lệnh Linux trong Python là sử dụng mô -đun Python. Dưới đây là một ví dụ về việc sử dụng quy trình phụ của người Viking để đếm số lượng dòng trong một tệp sử dụng lệnh Linux của WC WC -L.
Trước tiên chúng ta hãy nhập mô -đun phụ
# import subprocess library >import subprocessKhởi chạy lệnh shell mà chúng tôi muốn thực thi bằng hàm SubProcess.Popen. Các đối số cho lệnh này là lệnh shell dưới dạng danh sách và chỉ định đầu ra và lỗi.
>out = subprocess.Popen(['wc', '-l', 'my_text_file.txt'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)Đầu ra từ Subprocess.Popen là đối tượng SubProcess.Popen. Và đối tượng này có số lượng các phương thức được liên kết với nó và chúng tôi sẽ sử dụng phương thức Communication () để có được đầu ra và lỗi tiêu chuẩn trong trường hợp là một tuple.
Ở đây, đầu ra tiêu chuẩn chứa kết quả từ lệnh WC -L và Stderr không chứa vì không có lỗi.
>stdout,stderr = out.communicate() >print(stdout) 3503 my_text_file.txt >print(stderr) NoneSau đó, chúng ta có thể phân tích stdout để có được kết quả từ lệnh shell trong Python, theo cách chúng ta muốn. Ví dụ: nếu chúng ta chỉ muốn số lượng dòng trong tệp, chúng ta sẽ phân chia stdout
>stdout.split()[0] '3503'Chạy các lệnh shell (ví dụ: bash) trong Python khá dễ dàng bằng cách sử dụng gói hệ điều hành. Trong bài viết này, tôi phác thảo hai cách để chạy các lệnh shell trong Python: sử dụng phương thức hệ thống và phương thức popen.
Bài viết này là một phần của loạt hai phần liên quan đến việc chạy các lệnh shell từ bên trong Python.
- Phần 1: Thực hiện các lệnh shell với gói hệ điều hànhExecute shell commands with the os package
- Phần 2: Thực hiện các lệnh shell với gói phụ
Giải pháp đơn giản nhất để chạy các lệnh shell thông qua Python chỉ đơn giản là bằng cách sử dụng phương thức hệ thống của gói hệ điều hành. Gói OS, cung cấp một cách di động để sử dụng chức năng phụ thuộc vào hệ điều hành. Phương thức hệ thống thực thi một chuỗi là một lệnh trong một Subshell, về cơ bản là một ví dụ độc lập của bộ xử lý lệnh của hệ điều hành của bạn. Đối với Windows, các lệnh sẽ được chạy bằng CMD.exe, cho Linux, đây sẽ là Bash, Mac sẽ sử dụng Bash hoặc Z Shell.
Mã sau đây sẽ mở một bảng con, chạy lệnh và trả lại mã thoát quá trình - 0 (không) nếu lệnh đã chạy thành công, các số khác có nghĩa là có gì đó không sai (xem Linux và Windows).0 (zero) if the command has run successfully, other numbers mean something has gone wrong (see Linux and Windows).
import os os.system('echo "Hello World!"')
Thực hiện các lệnh shell và nhận đầu ra bằng gói hệ điều hành
Đôi khi, bạn không chỉ quan tâm đến việc chạy các lệnh shell, mà bạn còn muốn biết đầu ra in là gì. Gói OS cũng có một giải pháp cho việc này: phương pháp popen. Phương pháp này mở một đường ống vào lệnh, được sử dụng để chuyển đầu ra của nó sang biến Python.
Mã sau đây sẽ một lần nữa mở một vỏ bọc và chạy lệnh, nhưng thay vì trả lại mã thoát quá trình, nó sẽ trả về đầu ra lệnh. Nếu bạn muốn loại bỏ NextLine (\ n), bạn có thể sử dụng phương thức dải
output_stream = os.popen('echo "Hello World!"') output_stream.read()
❗ Lưu ý như sau:
- Nếu lệnh được truyền cho shell tạo ra lỗi, nó sẽ chỉ trả về hai trích dẫn đơn.
- Nếu bạn muốn biết nếu một lệnh đã hoàn thành thành công, bạn có thể truy cập mã thoát quy trình bằng phương thức đóng. Như thế này:
import subprocess file_ = open("ouput.txt", "w") subprocess.Popen("ls", stdout=file_) 0
Phương pháp popen của gói hệ điều hành sử dụng mô -đun phụ. Vì vậy, thay vì sử dụng popen, bạn cũng có thể giao tiếp trực tiếp với mô -đun phụ. Chúng tôi thảo luận về điều này trong bài viết tiếp theo.
Nói cảm ơn, đặt câu hỏi hoặc đưa ra phản hồi
Các công nghệ được cập nhật, thay đổi cú pháp và thành thật mà nói, tôi cũng mắc lỗi. Nếu một cái gì đó không chính xác, không đầy đủ hoặc không hoạt động, hãy cho tôi biết trong các ý kiến dưới đây và giúp hàng ngàn khách truy cập.