Jako że Python 3k wprowadza ścisłe rozróżnienie między łańcuchami i bajtami, argumenty linii poleceń w tablicy sys.argv są przedstawiane jako łańcuchy. Czasami konieczne jest traktowanie argumentów jako bajtów, np. podczas przekazywania ścieżki, która nie musi być w żadnym określonym kodowaniu znaków w systemie Unix.sys.argv jako bajty w Pythonie 3k
Zobaczmy przykład. Krótka Python 3k Program argv.py
następująco:
import sys
print(sys.argv[1])
print(b'bytes')
Gdy jest wykonywany jako python3.1 argv.py français
produkuje oczekiwany wynik:
français
b'bytes'
Należy zauważyć, że argument français jest w moim kodowania locale. Jednak, gdy mijamy argumentu w innym kodowaniu otrzymujemy błąd: python3.1 argv.py `echo français|iconv -t latin1`
Traceback (most recent call last):
File "argv.py", line 3, in <module>
print(sys.argv[1])
UnicodeEncodeError: 'utf-8' codec can't encode character '\udce7' in position 4: surrogates not allowed
Jak możemy przekazać dane binarne do Pythona programu 3k za pośrednictwem argumentów wiersza poleceń? Przykładem użycia jest podanie ścieżki do pliku użytkownika, który używa innych ustawień narodowych.
Kwestia kodowania wprowadzić w błąd odpowiedzi, proponuję 'python3 argv.py \ echo -ne" \ xff \ x80 \ x00 "\" który jest przykładem "przekazywania danych binarnych za pośrednictwem argumentów linii poleceń" – Nope