2014-01-20 3 views
1

Я пытаюсь запустить скрипт в Python3 с помощью функции exec().Использование функции «exec» для запуска скрипта в оболочке интерпретатора

Я изучаю Python с книгой «Learning Python», O'Reilly 5th Edition. В "Глава 2 Как Python Запуск программ" есть способ нравится:

>>> exec(open('script1.py').read()) 

Это мой файл script1.py

# A first script in python. 
import sys 
print(sys.platform) 
print(2 **100) 
x = 'Spam!' 
print(x * 8) 
input() 

Ожидаемый результат:

win32 
1267650600228229401496703205376 
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam! 

В работе я могу использовать только WinXP :-(

Но реальный выход в Python3 равен:

>>> exec(open('script1.py').read()) 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 1 
    # A first script in python. 
     ^
SyntaxError: invalid character in identifier 
>>> 

И выход в python2 является:

>>> exec(open('script1.py').read()) 
win32 
1267650600228229401496703205376 
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam! 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 7, in <module> 
    File "<string>", line 0 

    ^
SyntaxError: unexpected EOF while parsing 
>>> 

Я не понимаю, почему это не работает, как говорится в книге.

ответ

2

Проблема заключается в вашем редакторе, который добавляет «неправильный символ» (фактически, сам по себе символ) в начале файла. Пожалуйста, проверь это.

Если вы хотите, чтобы проверить эту гипотезу, пожалуйста

print open('script1.py').read(1) 

в питона замены.

Возможно, это спецификация в файле (спасибо @devnull).

Если это так, вы можете открыть файл с encondig utf-8-sig:

open('script1.py', encoding='utf-8-sig') 

Подробнее об этом вы можете прочитать здесь:

Что такое BOM (Bate Order Mark), вы можете найти здесь:

И, конечно, вы должны избегать спецификаций в сценариях в будущем. Проверьте настройки своего редактора, и убедитесь, что он не создает спецификации при сохранении скриптов.

+2

Чтобы быть точным, символ _incorrect_, вероятно, является спецификацией. – devnull

+0

@Igor Chubin - это символ char. Я использовал Notepad ++ для его создания и кодирования в UTF-8. Я изменил кодировку на UTF-8 без спецификации и сохранил ее. Теперь, это работает! Спасибо, парень, и @devnull тоже! – Trimax

+0

@Trimax: Да, гипотеза была правильной. Проверьте мое обновление. –

Смежные вопросы