Chcę uruchomić narzędzie do liczenia słów w Linuksie, aby określić liczbę linii w pliku/var/log/syslog, więc mogę wykryć, że rośnie. Próbowałem różnych testów, a gdy otrzymam wyniki z powrotem z wc, zawiera zarówno liczbę linii, jak i polecenie (np. Var/log/syslog).Wyjście podprocesu Python3
Więc to powrót: 1338/var/log/syslog Ale chcę tylko liczbę linii, więc chcę się rozebrać do/var/log/część syslog, i po prostu 1338 roku
I próbowałem przekonwertować go na ciąg z testu bytowego, a następnie rozbierając wynik, ale bez radości. Ta sama historia dla konwersji na łańcuchy i stripping, dekodowanie itd. - wszystkie nie dają rezultatów, których szukam.
Oto kilka przykładów tego, co mam, z 1338 linii w syslog:
- b'1338/var/log/syslog \ n”
- 1338/var/log/syslog
Oto niektóre kodu testu pisałem spróbować złamać tę nakrętkę, ale nie rozwiązanie:
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))
wyjście z tego jest:
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
Dzięki! Przetestowałem to i zadziałało. Zrobił wiele badań, nigdy nie widział. Dang! – user2565677
Należy ostrzec, że 'subprocess.getoutput' należy do kategorii * starszych funkcji wywołania powłoki * (http://docs.python.org/3/library/subprocess.html#subprocess.getoutput). – pepr
@pepr Ale co właściwie oznacza "dziedzictwo"? Nie widzę osi czasu do usunięcia, jak 3.5.0a0. (Może być zdefiniowany gdzie indziej?) – belacqua