Я хочу запустить утилиту подсчета слов в Linux wc, чтобы определить количество строк в настоящее время в каталоге/var/log/syslog, поэтому я могу обнаружить, что он растет. Я пробовал различные тесты, и пока я возвращаю результаты из wc, он включает в себя как количество строк, так и команду (например, var/log/syslog).Выход подпроцесса Python3
Так что возвращается: 1338/вар/Журнал/системный журнал Но я хочу только количество строк, поэтому я хочу, чтобы сдирать/вар/войти часть/системного журнала, и просто держать 1338.
I попытались преобразовать его в строку из байта, а затем лишить результат, но не радость. Такая же история для преобразования в строку и снятие, декодирование и т. Д. - все не дают результат, который я ищу.
Вот некоторые примеры того, что я получаю, с 1338 строк в системный журнал:
- b'1338/вар/Журнал/системного журнала \ п»
- 1338/вар/Журнал/Syslog
Здесь нет какой-то тестовый код, который я написал, чтобы попытаться взломать эту гайку, но не решение:
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))
выход из этого:
2A stdoutdata: b'1338/вар/Журнал/системного журнала \ N»
2B stdoutdata: 1338/VAR/Журнал/системный журнал
2C stdoutdata: 1338/уаг/журнал/системный журнал
2D stdoutdata: 1338/вар/журнал/Syslog
Спасибо! Протестировано, и это сработало. Проделал много исследований, никогда не видел этого. Dang! – user2565677
Вы должны быть предупреждены о том, что 'subprocess.getoutput' относится к категории * Legacy Shell Invocation Functions * (http://docs.python.org/3/library/subprocess.html#subprocess.getoutput). – pepr
@pepr Но что означает «наследие», говоря на самом деле? Я не вижу временной шкалы для удаления, начиная с 3.5.0a0. (Может быть определено в другом месте?) – belacqua