Sto cercando di eseguire il programma di conteggio delle parole di Linux wc per determinare il numero di righe attualmente in/var/log/syslog, così posso rilevare che sta crescendo. Ho provato vari test, e mentre ottengo i risultati da wc, include sia il conteggio delle righe che il comando (ad es. Var/log/syslog).Output subprocess Python3
Quindi è il ritorno: 1338/var/log/syslog Ma io voglio solo il numero di linee, quindi voglio togliere il/var/log porzione/syslog, e tenere solo 1338.
I ho provato a convertirlo in stringa da bytestring, e quindi a rimuovere il risultato, ma senza gioia. Stessa storia per la conversione in stringa e stripping, decodifica, ecc. - non tutti producono l'output che sto cercando.
Questi sono alcuni esempi di quello che mi capita, con 1338 linee in syslog:
- b'1338/var/log/syslog \ n'
- 1338/var/log/syslog
Ecco alcuni codice di prova che ho scritto per cercare di rompere il dado, ma nessuna soluzione:
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))
L'output di questo è:
2A stdoutdata: b'1338/var/log/syslog \ n'
2B stdoutdata: 1338/var/log/syslog
2C stdoutdata: 1338/var/log/syslog
stdoutdata 2D: 1338/var/log/syslog
Grazie! Testato, e ha funzionato. Aveva fatto molte ricerche, mai visto. Dang! – user2565677
Si dovrebbe essere avvisati che 'subprocess.getoutput' appartiene alla categoria di * Funzioni di Invocazione shell legacy * (http://docs.python.org/3/library/subprocess.html#subprocess.getoutput). – pepr
@pepr Ma cosa significa la designazione "legacy", in pratica? Non vedo una sequenza temporale per la rimozione, a partire da 3.5.0a0. (Può essere definito altrove?) – belacqua