2011-01-07 25 views
37

Thông thường bạn có thể thực thi một tập lệnh Python ví dụ: python myscript.py, nhưng nếu bạn đang ở chế độ tương tác, làm thế nào để thực thi kịch bản Python trên hệ thống tập tin?Có khả năng thực thi tập lệnh Python khi đang ở chế độ tương tác

>>> exec (Tệp) ???

Có thể thực thi tập lệnh nhiều lần.

+2

Tại sao 'myscript.py' không có chức năng" chính "? Tại sao bạn không thể 'nhập myscript' và' myscript.main() '? Đó là cách tiếp cận thông thường. Tại sao nó sẽ không hoạt động? Bạn có thể sửa myscript để thêm một chức năng "chính" đúng không? –

+0

Vấn đề là tôi đang tải "paster shell" và trong khi thực hiện libs dự án khác này được tải. Và trong cái vỏ tương tác này, tôi muốn thử một số thứ. Nhưng có bạn là đúng đề nghị của bạn là một trong những tốt – lennykey

+3

Điều này không trả lời các câu hỏi như bạn đã yêu cầu, nhưng trong trường hợp nó có liên quan đến bạn hoặc những người khác, tôi thấy điều này hữu ích khi tôi đang hoạt động phát triển: 'PYTHONSTARTUP = some_script.py python -i'. Điều này sẽ thực hiện some_script.py và thả bạn vào một trình bao tương tác. Nếu kịch bản làm việc của bạn định nghĩa các biến cục bộ, bạn sẽ có thể truy cập chúng từ trình bao. Điều này có thể thực sự tiện dụng khi cố gắng thử nghiệm mã hoặc phân tích hành vi sau khi thực tế. – Mark

Trả lời

35

Sử dụng execfile('script.py') nhưng nó chỉ làm việc trên python 2.x, nếu bạn đang sử dụng 3,0 thử this

+0

Thx. Tôi nghĩ rằng điều này làm việc cho tôi và có configuarion boilerplate tối thiểu – lennykey

22

import file không có phần mở rộng .py sẽ làm điều đó, tuy nhiên __name__ sẽ không là "__main__" vì vậy nếu tập lệnh thực hiện bất kỳ kiểm tra nào để xem nó có đang chạy tương tác hay không, bạn cần bỏ qua chúng.

Cách khác, nếu bạn đang muốn có một cái nhìn tại các môi trường sau khi kịch bản chạy thử python -i script.py

EDIT: Để tải nó một lần nữa

file = reload(file)

+3

'Cách khác, nếu bạn muốn có một cái nhìn về môi trường sau khi kịch bản chạy thử python -i script.py' Đây là sử thi cảm ơn bạn! –

2

Bạn có thể chạy bất kỳ lệnh hệ thống sử dụng python:

>>>from subprocess import Popen 
>>>Popen("python myscript.py", shell=True) 
+3

Subprocess không lý tưởng cho việc này. Bạn sẽ không thể tương tác với các biến của nó, bởi vì nó nằm trong một quá trình hoàn toàn riêng biệt, và bạn cần một lệnh khác thậm chí để xem kết quả của nó. –

5

Bạn cũng có thể sử dụng mô-đun subprocess. Một cái gì đó như:

>>> import subprocess 
>>> proc = subprocess.Popen(['./script.py']) 
>>> proc.communicate() 
9

Bạn có thể muốn nhìn vào IPython, một vỏ tương tác mạnh hơn. Nó có các lệnh "ma thuật" khác nhau bao gồm %run script.py (trong đó, tất nhiên, chạy tập lệnh và để lại bất kỳ biến nào được định nghĩa để bạn kiểm tra).

+1

Điều này không làm việc cho tôi. Tôi không thể truy cập bất kỳ biến nào. Nó có thể được rằng tôi đặt kịch bản của tôi trong chính()? – LWZ

Các vấn đề liên quan