Como Python 3k introduce una distinción estricta entre cadenas y bytes, los argumentos de línea de comando en la matriz sys.argv se presentan como cadenas. Algunas veces es necesario tratar los argumentos como bytes, p. cuando se pasa una ruta que no necesita estar en una codificación de caracteres particular en Unix.sys.argv como bytes en Python 3k
Veamos un ejemplo. Un breve programa en Python 3k argv.py
siguiente:
import sys
print(sys.argv[1])
print(b'bytes')
Cuando se ejecuta como python3.1 argv.py français
Produce espera:
français
b'bytes'
Tenga en cuenta que el argumento français está en mi local de codificación. Sin embargo, cuando se pasa el argumento de una codificación diferente obtenemos un error: 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
¿cómo vamos a pasar datos binarios a través de programa de Python 3k argumentos de línea de comandos? Un ejemplo de uso es pasar una ruta a un archivo de un usuario que usa otra configuración regional.
La cuestión de codificación confundir las respuestas, sugiero un 'python3 argv.py \' echo -ne "\ xff \ x80 \ x00" \ '' que es un ejemplo de «pasar datos binarios mediante argumentos de línea de comandos» – Nope