Giả sử tôi có tệp foo.py và trong tệp tôi muốn thực thi tệp bar.py. Tuy nhiên, bar.py không nằm trong cùng thư mục với foo.py, nó nằm trong thư mục con gọi là baz. Liệu execfile
có hoạt động không? Điều gì về os.system
?Làm thế nào để chạy một tệp Python không có trong thư mục từ một tệp Python khác?
Trả lời
Chỉ cần thêm một __init__.py
tập tin trống để báo hiệu baz
là một mô-đun và từ foo.py
làm:
from baz import bar
Trừ khi, tất nhiên, bạn có một lý do chính đáng để không làm baz
thành một mô-đun (và sử dụng execfile).
Câu hỏi ngụ ý rằng bạn muốn chạy chúng dưới dạng tập lệnh, vì vậy có: bạn có thể sử dụng execfile trong 2.X hoặc subprocess (gọi cho thông dịch viên và chuyển đoạn mã làm đối số). Bạn chỉ cần cung cấp đường dẫn tuyệt đối cho các tệp.
# Python 2.X only!
execfile ('c:/python/scripts/foo/baz/baz.py')
Thực hiện điều đó nghĩa là dễ vỡ, tất nhiên. Nếu baz luôn luôn là một subirectory của foo bạn có thể lấy nó từ tập tin foo của:
baz_dir = os.path.join(os.path.dirname(__file__), "baz")
baz_file = os.path.join(baz_dir, "baz.py")
execfile(baz_file)
Nếu cả hai tập tin nằm trong vị trí có thể được nhìn thấy bởi python của bạn - ví dụ, các thư mục trong sys.path hoặc đã được thêm vào đường dẫn tìm kiếm bằng cách sử dụng site bạn có thể nhập baz từ foo và gọi trực tiếp chức năng của nó. Nếu bạn cần thực sự hành động dựa trên thông tin từ baz, thay vì chỉ kích hoạt một hành động, đây là một cách tốt hơn để đi. As long as there is an init.py in each folder Bạn chỉ có thể làm
import baz
baz.do_a_function_defined_in_baz()
import sys, thay đổi "sys.path" bằng cách thêm các con đường trong thời gian chạy, sau đó nhập các module sẽ giúp
Cảm ơn bạn, tôi đang làm việc trên quyền này hiện nay. – user1938464