Tôi muốn chạy tiện ích đếm từ Linux wc để xác định số dòng hiện tại trong/var/log/syslog, vì vậy tôi có thể phát hiện rằng nó đang phát triển. Tôi đã thử các thử nghiệm khác nhau và trong khi tôi nhận được kết quả từ wc, nó bao gồm cả số lượng dòng cũng như lệnh (ví dụ: var/log/syslog).Đầu ra của Python3 subprocess
Vì vậy, nó trở về: 1338/var/log/syslog Nhưng tôi chỉ muốn đếm dòng, vì vậy tôi muốn lột thư mục/var/log/phần syslog, và chỉ cần giữ 1338.
tôi đã cố gắng chuyển đổi nó thành chuỗi từ bytestring, và sau đó tước kết quả, nhưng không có niềm vui. Cùng một câu chuyện để chuyển đổi thành chuỗi và tước, giải mã, v.v. - tất cả đều không tạo ra kết quả mà tôi đang tìm kiếm.
Đây là một số ví dụ về những gì tôi nhận được, với 1338 dòng trong syslog:
- b'1338/var/log/syslog \ n'
- 1338/var/log/syslog
Dưới đây là một số mã kiểm tra tôi đã viết để thử và nứt hạt này, nhưng không có giải pháp:
import subprocess
#check_output returns byte string
stdoutdata = subprocess.check_output("wc --lines /var/log/syslog", shell=True)
print("2A stdoutdata: " + str(stdoutdata))
stdoutdata = stdoutdata.decode("utf-8")
print("2B stdoutdata: " + str(stdoutdata))
stdoutdata=stdoutdata.strip()
print("2C stdoutdata: " + str(stdoutdata))
Kết quả từ này là:
2A stdoutdata: b'1338/var/log/syslog \ n'
2B stdoutdata: 1338/var/log/syslog
2C stdoutdata: 1338/var/log/syslog
2D stdoutdata: 1338/var/log/syslog
Cảm ơn! Thử nghiệm nó, và nó hoạt động. Đã thực hiện rất nhiều nghiên cứu, chưa bao giờ thấy điều đó. Dang! – user2565677
Bạn nên được cảnh báo rằng 'subprocess.getoutput' thuộc về thể loại của * Hàm gọi hàm Legacy * (http://docs.python.org/3/library/subprocess.html#subprocess.getoutput). – pepr
@pepr Nhưng ý nghĩa 'di sản' có nghĩa là gì, thực tế nói? Tôi không thấy dòng thời gian để xóa, kể từ 3.5.0a0. (Có thể được định nghĩa ở một nơi khác không?) – belacqua