2015-05-18 12 views
9

PEP0263 określa składnię deklarującą kodowanie pliku źródłowego Pythona w samym pliku źródłowym.Określ kodowanie pliku źródłowego Python z wiersza polecenia

Czy można określić kodowanie z wiersza poleceń?

Czy istnieje powód, dla którego może to być niepożądane?

mam na myśli coś takiego:

$ python --encoding utf-8 myscript.py 

lub nawet:

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

A następnie powinien zastąpić kodowanie określone w pliku źródłowym, jeśli określono? –

+0

Można to zrobić w obie strony. Możesz chcieć przesłonić kodowanie niepoprawnie określone w pliku źródłowym. Z drugiej strony możesz chcieć powiedzieć "użyj kodowania podanego w wierszu poleceń _nie ma__ kodowania jest określone w pliku źródłowym." – user3414663

Odpowiedz

3

To jest hack, i nie jest to, czego szukasz, a tak nie jest pracować na systemach, które nie mają wartości sed, ale można przedłużyć linię kodu do dowolnego skryptu Pythona, używając sed '1s/^/# -*- coding: utf-8 -*-\n/' script.py | python.

Aby to uogólnić, możesz zdefiniować funkcję w .bashrc lub profilu.

Na marginesie uważam, że powodem, dla którego nie zostało to zaimplementowane, jest to, że kodowanie jest i powinno być uważane za właściwość każdego pliku, a nie za wywołanie, które powoduje uruchomienie wątku. Konceptualne przestrzenie, w których istnieją kodowanie plików i procesy odradzania, są całkiem inne, przynajmniej dla mojego myślenia.

1

Chociaż mogą być specjalne przypadki użycia, w których ta funkcja może pomóc, myślę, że może to być mylące.

Po wykonaniu skryptu Pythona, nie może być 2 diffent kodowania:

  • kodowanie skrypt źródła, które mogą być zdefiniowane w samej skryptu przez PEP0263
  • kodowanie środowiska, które mogą być zdefiniowane przez zmienne środowiskowe

były jest statyczna w skrypcie, a jej jedynym zastosowaniem jest umożliwienie programiście używać znaki spoza ASCII w litteral ciągów

To ostatnie jest tym, co powinno być używane w przypadku IO. Może się zmieniać w różnych wersjach skryptu.

Jeśli chcesz przekazać kodowanie skryptów w wierszu poleceń (lub zmiennych środowiskowych), wprowadzasz zamieszanie w lokalnym kodowaniu systemu wykonawczego.

Powiązane problemy