Python 3k dizeleri ve baytlar arasında kesin bir ayrım getirdiğinden, sys.argv dizisindeki komut satırı argümanları dizeler olarak sunulur. Bazen argümanları bayt olarak, örn. Unix'te herhangi bir karakter kodlamasında bulunması gereken bir yolu geçerken.Python'da bayt olarak sys.argv 3k
Bir örnek görelim. Kısa bir Python 3k programı argv.py
aşağıdaki gibidir:
python3.1 argv.py français
olarak yürütüldüğünde
import sys
print(sys.argv[1])
print(b'bytes')
beklenen üretir çıktı: argüman benim yerel kodlamasında olduğu français olduğunu
français
b'bytes'
Not. 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
nasıl komut satırı argümanları üzerinden Python 3k programa ikili veri aktarmak zorundadır: biz farklı kodlamada argüman geçmesi Ancak, bir hatayla elde? Kullanım örneği, başka yerel ayarları kullanan bir kullanıcının dosyasına giden bir yolu iletmektir. Eğer kodlama argüman olarak kullanmak veya bytes(sys.argv[1], 'latin-1')
çağrı biliyorsanız,
sys.argv[1].encode()
ya:
kodlama sorunu olarak autodetected "UTF-8" olduğunu varsayarak önlemek için Cevapları yanıltmak, bir "python3 argv.py \ echo -ne" \ xff \ x80 \ x00 "\' 'önerdiğini belirtmek isterim. Bu,« komut satırı argümanları üzerinden ikili veriyi geçme »örneğidir. – Nope