2015-05-18 8 views
9

PEP0263 specifica una sintassi per dichiarare la codifica di un file di origine Python all'interno del file di origine stesso.Specificare la codifica del file di origine Python dalla riga di comando

È possibile specificare la codifica dalla riga di comando?

Oppure c'è un motivo per cui questo potrebbe essere indesiderabile?

Sto pensando a qualcosa di simile:

$ python --encoding utf-8 myscript.py 

o anche:

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

E quindi dovrebbe sovrascrivere la codifica specificata nel file sorgente, se specificato? –

+0

Si potrebbe andare in entrambe le direzioni. Si potrebbe voler sovrascrivere una codifica erroneamente specificata nel file sorgente. D'altra parte si potrebbe voler dire "usa la codifica specificata nella riga di comando _unless_ una codifica è specificata nel file sorgente". – user3414663

risposta

3

Si tratta di un hack, e non è quello che stai cercando, e non lo fa funziona su sistemi che non dispongono di sed, ma è possibile anteporre la linea di codifica a qualsiasi script python utilizzando sed '1s/^/# -*- coding: utf-8 -*-\n/' script.py | python.

Per rendere questo più generalizzato, è possibile definire una funzione in .bashrc o profilo.

Per inciso, penso che la ragione per cui questo non è stato implementato in primo luogo è che la codifica è e dovrebbe essere considerata una proprietà di ogni file stesso, non la chiamata che genera il thread. Gli spazi concettuali in cui esistono la codifica dei file e la generazione dei processi sono piuttosto diversi, almeno per quanto mi riguarda.

1

Anche se potrebbero esserci casi di utilizzo speciale in cui questa funzionalità potrebbe essere di aiuto, penso che potrebbe essere fonte di confusione.

Quando si esegue uno script Python, ci possono essere 2 codifiche diffent:

  • la codifica script di origine, che può essere definito nello script stesso tramite PEP0263
  • la codifica ambiente che può essere definito tramite variabili d'ambiente

il primo è statica nello script e il suo unico utilizzo è quello di consentire programmatore di utilizzare caratteri non ASCII nelle stringhe Litteral

Quest'ultimo è ciò che dovrebbe essere usato per IO. Potrebbe cambiare in diverse esecuzioni dello script.

Se si desidera passare la codifica dello script sulla riga di comando (o tramite variabili di ambiente) si aggiunge confusione con la codifica del sistema di runtime locale.

Problemi correlati