Script Python non funzionerà Via TextMate, OK in IDLE ed Eclipse
Domanda
ho scritto quanto segue per un compito a casa e funziona benissimo in IDLE e Eclipse in esecuzione Python 3.
Tuttavia, ho provato a lanciarlo da TextMate con la nuova linea 1 - che ho trovato qui - per puntare a Python 3 su Mac. Sembra di essere in esecuzione Python 3, ma restituisce un errore. Dice: EOFError: EOF durante la lettura di una linea. E 'riferendosi alla linea 5 di seguito.
Qualcuno sa perché?
A proposito, questo problema TextMate non è parte del compito a casa, quindi non sto cercando di ottenere dei compiti a casa. Voglio solo capire come utilizzare TextMate con Python 3.
#! /usr/local/bin/python3
#
# Tests user string against two conditions.
#
user_string = input("Enter a string that is all upper case and ends with a period: ")
if user_string.isupper() and user_string.endswith("."):
print("Your string met both conditions.")
else:
if user_string.isupper():
print("Your string does not end with a period.")
elif user_string.endswith("."):
print("Your string is not all upper.")
else:
print("Your string failed both conditions.")
Soluzione
Il problema che state vedendo non ha nulla a che fare con la versione di Python. Il problema è che TextMate non cerca di standard input così, quando si esegue tramite comando bundle Run Script
Python del TextMate, il programma Python vede un immediato end-of-file. Come spiegato qui , TextMate usato essere più elaborato di questo, ma il meccanismo è utilizzato alcun lavori più lunghi in OS X 10.6 in modo che la funzione è stata disabilitata.
Una soluzione è quella di utilizzare il Maiusc-Comando-R Comando Run Script in Terminal
del fascio Python di TextMate. Questo fa sì che TextMate per aprire una finestra di terminale ed eseguire lo script lì ed è possibile immettere l'ingresso lì. Purtroppo, mentre TextMate fa rispettare la shebang con il normale Comando-R Run Script command
, non sembra di farlo con il comando Run Script in Terminal
. È possibile verificare che se stessi in vari modi. Provare a eseguire questo frammento di codice in TextMate:
#! /usr/local/bin/python3
import sys
print(sys.executable)
Per aggirare questo, è possibile impostare la variabile d'ambiente TM_PYTHON
in TextMate. Vedere la risposta qui per maggiori dettagli su come farlo.
Altri suggerimenti
TextMate sta usando il built-in Python, piuttosto che rispettando la linea di shebang. si sarebbe probabilmente necessario modificare il codice fascio di utilizzare il pitone destra.