Tôi đang cố gắng thực thi một tệp với các lệnh python từ bên trong trình thông dịch.
EDIT: Tôi đang cố gắng sử dụng các biến và cài đặt từ tệp đó, để không gọi một quy trình riêng biệt.
Tôi đang cố gắng thực thi một tệp với các lệnh python từ bên trong trình thông dịch.
EDIT: Tôi đang cố gắng sử dụng các biến và cài đặt từ tệp đó, để không gọi một quy trình riêng biệt.
Câu trả lời:
Một số cách.
Từ vỏ
python someFile.py
Từ bên trong IDLE, nhấn F5 .
Nếu bạn đang gõ tương tác, hãy thử điều này: (chỉ Python 2 !)
>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module
Đối với Python3 , sử dụng:
>>> exec(open("filename.py").read())
pythonkhông hoạt động nếu bạn đang chạy python 3, python3được sử dụng thay thế.
stdintừ một tệp như sử dụng <đến tập lệnh thực thi trong execfile().? @ s-lott
pythonchỉ đến python3.
pythonhệ thống thực thi tìm thấy gì khi xem qua các thư mục trong biến môi trường PATH.
Đối với Python 2:
>>> execfile('filename.py')
Đối với Python 3:
>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())
Xem tài liệu . Nếu bạn đang sử dụng Python 3.0, hãy xem câu hỏi này .
Xem câu trả lời của @ S.Lott để biết ví dụ về cách bạn truy cập toàn cầu từ filename.py sau khi thực hiện nó.
exec(open("./path/to/script.py").read(), globals())
Điều này sẽ thực thi một tập lệnh và đặt tất cả các biến toàn cục của nó trong phạm vi toàn cầu của trình thông dịch (hành vi bình thường trong hầu hết các môi trường tập lệnh).
openđọc trực tiếp mã từ tập lệnh. Để vượt qua các đối số, hãy xem câu trả lời này , nhưng thay vì execfile, rõ ràng sử dụng execvà opennhư được hiển thị ở trên.
Ngạc nhiên là tôi chưa thấy điều này. Bạn có thể thực thi một tệp và sau đó để trình thông dịch mở sau khi kết thúc thực thi bằng -itùy chọn:
| foo.py |
----------
testvar = 10
def bar(bing):
return bing*3
--------
$ python -i foo.py
>>> testvar
10
>>> bar(6)
18
Tôi đang cố gắng sử dụng các biến và cài đặt từ tệp đó, để không gọi một quy trình riêng biệt.
Chà, chỉ cần nhập tệp với import filename(trừ .py, cần nằm trong cùng thư mục hoặc trên thư mục của bạn PYTHONPATH) sẽ chạy tệp, làm cho các biến, hàm, lớp, v.v. của nó có sẵn trong filename.variablekhông gian tên.
Vì vậy, nếu bạn có cheddar.pythư rác biến đổi và trứng chức năng - bạn có thể nhập chúng với import cheddar, truy cập vào biến cheddar.spamvà chạy hàm bằng cách gọicheddar.eggs()
Nếu bạn có mã cheddar.pynằm ngoài hàm, nó sẽ được chạy ngay lập tức, nhưng việc xây dựng các ứng dụng chạy nội dung khi nhập sẽ khiến bạn khó sử dụng lại mã của mình. Nếu tất cả có thể, đặt mọi thứ bên trong các hàm hoặc các lớp.
from filename import *
Theo quan điểm của tôi, cách tốt nhất là:
import yourfile
và sau khi sửa đổi yourfile.py
reload(yourfile)
hoặc là
import imp;
imp.reload(yourfile) in python3
nhưng điều này sẽ làm cho hàm và các lớp trông giống như vậy: yourfile.feft1, yourfile. class1 .....
Nếu bạn không thể chấp nhận những điều đó, giải pháp cuối cùng là:
reload(yourfile)
from yourfile import *
Tôi không phải là một chuyên gia nhưng đây là những gì tôi nhận thấy:
nếu mã của bạn là mycode.py chẳng hạn và bạn chỉ nhập 'nhập mycode', Python sẽ thực thi nó nhưng nó sẽ không cung cấp tất cả các biến của bạn cho trình thông dịch. Tôi thấy rằng bạn nên nhập thực sự 'từ nhập mã mycode *' nếu bạn muốn cung cấp tất cả các biến cho trình thông dịch.
Cứ làm đi,
from my_file import *
Đảm bảo không thêm phần mở rộng .py. Nếu tệp .py của bạn trong thư mục con sử dụng,
from my_dir.my_file import *
Đối với Python 3:
>>> exec(open("helloworld.py").read())
Đảm bảo rằng bạn đang ở đúng thư mục trước khi chạy lệnh.
Để chạy một tệp từ một thư mục khác, bạn có thể sử dụng lệnh dưới đây:
with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
exec(file.read())
Giả sử bạn mong muốn các tính năng sau:
__name__ == '__main__' là True để tập lệnh hoạt động đúng như tập lệnh.Các exec(open('foo.py').read())thất bại Tính năng 1 Các import foochiến lược thất bại Tính năng 2
Để có được cả hai, bạn cần điều này:
source = open(filename).read()
code = compile(source, filename, 'exec')
exec(code)