2015-05-18 15 views
9

PEP0263 chỉ định cú pháp khai báo mã hóa của tệp nguồn Python trong chính tệp nguồn.Chỉ định mã hóa tệp nguồn Python từ dòng lệnh

Có thể chỉ định mã hóa từ dòng lệnh không?

Hoặc có lý do khiến điều này có thể không mong muốn?

Tôi đang nghĩ đến việc gì đó như:

$ python --encoding utf-8 myscript.py 

hoặc thậm chí:

$ PYTHONSOURCEENCODING=utf-8 python myscript.py 
+0

Và sau đó nó sẽ ghi đè mã hóa được chỉ định trong tệp nguồn, nếu được chỉ định? –

+0

Bạn có thể thực hiện cả hai cách này. Bạn có thể muốn ghi đè mã hóa được chỉ định không chính xác trong tệp nguồn. Mặt khác, bạn có thể muốn nói "sử dụng mã hóa được chỉ định trên dòng lệnh _unless_ một mã hóa được chỉ định trong tệp nguồn." – user3414663

Trả lời

3

Đây là một hack, và không phải là những gì bạn đang tìm kiếm, và nó không làm việc trên các hệ thống không có sed, nhưng bạn có thể thêm dòng mã hóa vào bất kỳ tập lệnh python nào bằng cách sử dụng sed '1s/^/# -*- coding: utf-8 -*-\n/' script.py | python.

Để thực hiện việc này tổng quát hơn, bạn có thể xác định hàm trong .bashrc hoặc hồ sơ của mình. Là một sang một bên, tôi nghĩ rằng lý do này không được thực hiện ở nơi đầu tiên là mã hóa và nên được coi là một tài sản của mỗi tập tin riêng của mình, không phải là cuộc gọi mà sinh ra các chủ đề. Các không gian khái niệm trong đó mã hóa tệp và quy trình sinh sản tồn tại khá khác nhau, ít nhất là theo suy nghĩ của tôi.

1

Mặc dù có thể có trường hợp sử dụng đặc biệt khi tính năng này có thể giúp ích, tôi nghĩ rằng điều đó có thể gây nhầm lẫn.

Khi bạn thực hiện một kịch bản Python, có thể có 2 mã hóa diffent:

  • bảng mã nguồn kịch bản, mà có thể được định nghĩa trong kịch bản chính nó qua PEP0263
  • mã hóa môi trường có thể được xác định thông qua biến môi trường

Điều thứ nhất là tĩnh trong kịch bản và sử dụng duy nhất của nó là cho phép lập trình viên sử dụng các ký tự ASCII không trong chuỗi litteral

Sau đó là những gì nên được sử dụng cho IO. Nó có thể thay đổi trên các kịch bản lệnh khác nhau.

Nếu bạn muốn chuyển mã hóa tập lệnh trên dòng lệnh (hoặc thông qua các biến môi trường), bạn thêm nhầm lẫn với mã hóa hệ thống thời gian chạy cục bộ.

Các vấn đề liên quan