Khi Python 3k giới thiệu sự phân biệt nghiêm ngặt giữa các chuỗi và byte, các đối số dòng lệnh trong mảng sys.argv được trình bày dưới dạng chuỗi. Đôi khi, cần phải coi các đối số là byte, ví dụ: khi đi qua một đường dẫn không cần phải có trong bất kỳ mã hóa ký tự cụ thể nào trong Unix.sys.argv dưới dạng byte trong Python 3k
Hãy xem ví dụ. Sơ lược Python 3k chương trình argv.py
sau:
import sys
print(sys.argv[1])
print(b'bytes')
Khi nó được thực hiện như python3.1 argv.py français
nó tạo ra mong đợi:
français
b'bytes'
Lưu ý rằng đối số français là trong bảng mã miền địa phương của tôi. Tuy nhiên, khi chúng ta vượt qua đối số trong một bảng mã khác nhau chúng ta có được một lỗi: 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
Làm thế nào chúng ta sẽ truyền dữ liệu nhị phân để chương trình Python 3k qua đối số dòng lệnh? Một ví dụ về cách sử dụng là chuyển một đường dẫn đến tệp của người dùng sử dụng ngôn ngữ khác.
Vấn đề mã hóa đánh lừa các câu trả lời, tôi đề xuất một "python3 argv.py \" echo -ne "\ xff \ x80 \ x00" \ '' là một ví dụ về «truyền dữ liệu nhị phân qua các đối số dòng lệnh» – Nope