簡體   English   中英

使用'exec'函數在解釋器Shell中運行腳本

[英]Using 'exec' Function to Run Script in the Interpreter Shell

我嘗試通過exec()函數在Python3中運行腳本。

我正在用O'Reilly第5版的“學習Python”這本書來學習Python。 在“第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
>>>

我不明白為什么這不像書中所說的那樣起作用。

問題出在您的編輯器中,該編輯器在文件的開頭添加了“不正確的符號”(實際上,該符號本身是正確的)。 請檢查一下。

如果您想檢查這個猜想,請執行

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

在python repl中。

它可能是文件中的BOM(感謝@devnull)。

如果是這樣,您可以使用encondig utf-8-sig打開文件:

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

您可以在這里閱讀更多內容:

什么是BOM(字節順序標記),您可以在此處找到:

當然,將來您必須避免在腳本中使用BOM。 請檢查編輯器的設置,並確保在保存腳本時不會創建BOM。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM