Muunna tavut merkkijonoksi
Käytän tätä koodia saadakseni vakiotulosteen ulkoisesta ohjelmasta:
>>> from subprocess import *
>>> command_stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
Kommunikoi()-metodi palauttaa tavujoukon:
>>> command_stdout
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'
Haluaisin kuitenkin käsitellä tulostetta normaalina Python-merkkijonona. Jotta voisin tulostaa sen näin:
>>> print(command_stdout)
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2
Luulin, että binascii.b2a_qp()-metodi on sitä varten, mutta kun kokeilin sitä, sain taas saman tavujoukon:
>>> binascii.b2a_qp(command_stdout)
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'
Miten muunnan tavuarvon takaisin merkkijonoksi? Tarkoitan, että käytän "pattereita" sen sijaan, että tekisin sen manuaalisesti. Ja haluaisin, että se olisi kunnossa Python 3:n kanssa.
1923
3
Sinun on purettava tavuobjekti merkkijonon tuottamiseksi:
Sinun on purettava tavujono ja muutettava se merkkijonoksi (Unicode).
Python 2:ssa
tai
Python 3:lla
tai
Luulen, että sinä todella haluat tämän:
Aaron'n vastaus oli oikea, paitsi että sinun on tiedettävä mitä koodausta käyttää. Ja uskon, että Windows käyttää 'windows-1252'. Sillä on merkitystä vain, jos sisällössäsi on epätavallisia (ei-ASCII) merkkejä, mutta silloin sillä on merkitystä.
Muuten, se, että sillä on väliä, on syy siihen, että Python siirtyi käyttämään kahta eri tyyppiä binääri- ja tekstidataa varten: se ei voi muuntaa maagisesti niiden välillä, koska se ei tiedä koodausta, ellet kerro sitä sille! Ainoa tapa, jolla SINÄ tietäisit sen, on lukea Windowsin dokumentaatio (tai lukea se täältä).