Làm thế nào để chạy một tập lệnh python từ trình bao tương tác IDLE?


102

Làm cách nào để chạy tập lệnh python từ bên trong trình bao tương tác IDLE?

Sau đây là một lỗi:

>>> python helloworld.py
SyntaxError: invalid syntax

Những gì hiện helloworld.pycái nhìn như thế nào?
TerryA

vâng nó có nghĩa là có gì đó sai với mã của bạn đăng mã của bạn!
Serial

12
Không, không nhất thiết. Rất có thể OP đang nhập python helloworld.pyvào một cửa sổ IDLE shell và điều đó không hoạt động.
Ned Deily

Nó cũng không hoạt động trong trình thông dịch tiêu chuẩn. Vấn đề này đã xảy ra trước khi mọi người nhầm tưởng rằng lời nhắc thông dịch là một lời nhắc dòng lệnh.
Terry Jan Reedy

Bạn nên chấp nhận câu trả lời từ Ned Deily nếu câu trả lời của bạn đúng. Điều này cũng sẽ giúp các nhà phát triển đồng nghiệp nhanh chóng tìm ra câu trả lời chính xác.
Krishna Oza

Câu trả lời:


141

Python3 :

exec(open('helloworld.py').read())

Nếu tệp của bạn không ở cùng một địa chỉ:

exec(open('./app/filename.py').read())

Xem https://stackoverflow.com/a/437857/739577 để chuyển các biến cục bộ / toàn cục.


Trong các phiên bản Python không dùng nữa

Python2 Built-in chức năng: execfile

execfile('helloworld.py')

Nó thường không thể được gọi với các đối số. Nhưng đây là một cách giải quyết:

import sys
sys.argv = ['helloworld.py', 'arg']  # argv[0] should still be the script name
execfile('helloworld.py')

Không được dùng nữa kể từ ngày 2.6: popen

import os
os.popen('python helloworld.py') # Just run the program
os.popen('python helloworld.py').read() # Also gets you the stdout

Với các đối số:

os.popen('python helloworld.py arg').read()

Sử dụng trước: quy trình phụ

import subprocess
subprocess.call(['python', 'helloworld.py']) # Just run the program
subprocess.check_output(['python', 'helloworld.py']) # Also gets you the stdout

Với các đối số:

subprocess.call(['python', 'helloworld.py', 'arg'])

Đọc tài liệu để biết chi tiết :-)


Đã kiểm tra với điều cơ bản này helloworld.py:

import sys
if len(sys.argv) > 1:
    print(sys.argv[1])

2
Bạn có thể vui lòng thêm một ví dụ với các đối số dòng lệnh.
ViFI

1
Không làm việc với Python3 và hỏi không nói rõ phiên bản Python rõ ràng
Suncatcher

Đã thêm execcho Python3
Hugues Fontenelle

35

Bạn có thể sử dụng điều này trong python3:

exec(open(filename).read())

24

Cửa sổ trình bao IDLE không giống với trình bao đầu cuối (ví dụ: đang chạy shhoặc bash). Đúng hơn, nó giống như ở trong trình thông dịch tương tác Python ( python -i). Cách dễ nhất để chạy tập lệnh trong IDLE là sử dụng Openlệnh từ Filemenu (điều này có thể thay đổi một chút tùy thuộc vào nền tảng bạn đang chạy) để tải tệp tập lệnh của bạn vào cửa sổ trình chỉnh sửa IDLE và sau đó sử dụng lệnh Run-> Run Module(phím tắt F5).


1
Nhưng bạn không thể vượt qua các đối số. :(
Erica Kane

3
Thật không may, không, không dễ dàng để chạy một tệp Python trong IDLE trong khi truyền các đối số dòng lệnh. Có một vấn đề lâu dài để IDLE làm như vậy ( bug.python.org/issue5680 ). Một cách giải quyết để kiểm tra là khởi tạo thủ công sys.argvngay từ đầu chương trình, chẳng hạn như trong bảng if __name__ == "__main__"soạn sẵn thông thường .
Ned Deily

Câu trả lời này làm rõ lý do tại sao chúng ta không thể chạy tập lệnh python bằng IDLE shell. Cảm ơn @NedDeily
arsho

1
Kể từ IDLE 3.7.4, bây giờ bạn có thể chạy một mô-đun với các đối số. Sử dụng lệnh mới Run-> Run with Customized...(phím tắt Shift + F5) và một cửa sổ bật lên sẽ mở ra nơi bạn có thể cung cấp các đối số của mình. Rất tiếc, hiện tại nó không nhớ chúng nên bạn sẽ dán chúng sau mỗi lần chạy.
Dan Nolan

6

Thử cái này

import os
import subprocess

DIR = os.path.join('C:\\', 'Users', 'Sergey', 'Desktop', 'helloword.py')

subprocess.call(['python', DIR])

4

execFile('helloworld.py')làm công việc cho tôi. Một điều cần lưu ý là nhập tên thư mục đầy đủ của tệp .py nếu nó không nằm trong chính thư mục Python (ít nhất đây là trường hợp trên Windows)

Ví dụ, execFile('C:/helloworld.py')


4

CÁCH DỄ DÀNG NHẤT

python -i helloworld.py  #Python 2

python3 -i helloworld.py #Python 3

2

Ví dụ:

import subprocess

subprocess.call("C:\helloworld.py")

subprocess.call(["python", "-h"])

2
subprocess.call(r'c:\path\to\something.py')không làm việc cho tôi. OSError: [WinError 193]% 1 không phải là một ứng dụng Win32 hợp lệ
Terry Jan Reedy

Hãy thử nhập quy trình phụ này import os DIR = os.path.join ('C: \\', 'Users', 'Sergey', 'Desktop', 'a.py') subprocess.call (['python', DIR] )
Sergey Nosov

1

Trong Python 3, không có execFile. Người ta có thể sử dụng exechàm tích hợp, chẳng hạn:

import helloworld
exec('helloworld')

1

Trong IDLE, các hoạt động sau: -

import helloworld

Tôi không biết nhiều về lý do tại sao nó hoạt động, nhưng nó có ..


những gì bạn đang làm là tải một mô-đun không chạy từ shell. một sự khác biệt giữa hai là: 1) Loading mô-đun mô-đun tên của bạn Tên __ = tên của tập tin 2) chạy từ vỏ tên module _name __ = " _main "
Tanweer alam

Nó không phải là một cách tốt để chạy chương trình vì bạn thực sự đang nhập và không chạy nó. Nội dung của nó sẽ được nhập và sẽ vô nghĩa nếu bạn không muốn sử dụng chúng.
Abhijeet.py

1

Để chạy một tập lệnh python trong một trình bao python chẳng hạn như Idle hoặc trong một trình bao Django, bạn có thể thực hiện như sau bằng cách sử dụng hàm execute (). Exec () thực thi một đối số đối tượng mã. Một đối tượng mã trong Python chỉ đơn giản là mã Python được biên dịch. Vì vậy, trước tiên bạn phải biên dịch tệp script của mình và sau đó thực thi nó bằng cách sử dụng execute (). Từ vỏ của bạn:

>>>file_to_compile = open('/path/to/your/file.py').read()
>>>code_object = compile(file_to_compile, '<string>', 'exec')
>>>exec(code_object)

Tôi đang sử dụng Python 3.4. Xem biên dịchexec tài liệu để biết chi tiết.


1

Tôi đã thử nghiệm điều này và nó gần như hoạt động:

exec(open('filename').read())  # Don't forget to put the filename between ' '

cảm ơn cho mẹo báo giá, điều này làm việc cho tôi. Đã ủng hộ.
Forever Learner,

1

bạn có thể làm điều đó bằng hai cách

  • import file_name

  • exec(open('file_name').read())

nhưng hãy đảm bảo rằng tệp đó phải được lưu trữ ở nơi chương trình của bạn đang chạy


0

Trên môi trường Windows, bạn có thể thực thi tệp py trên dòng lệnh Python3 shell với cú pháp sau:

execute (open ('đường dẫn tuyệt đối đến tên_tệp'). read ())

Dưới đây giải thích cách thực thi một tệp helloworld.py đơn giản từ dòng lệnh python shell

Vị trí tệp: C: /Users/testuser/testfolder/helloworld.py

Nội dung tệp: print ("hello world")

Chúng tôi có thể thực thi tệp này trên Python3.7 Shell như sau:

>>> import os
>>> abs_path = 'C://Users/testuser/testfolder'
>>> os.chdir(abs_path)
>>> os.getcwd()
'C:\\Users\\testuser\\testfolder'

>>> exec(open("helloworld.py").read())
hello world

>>> exec(open("C:\\Users\\testuser\\testfolder\\helloworld.py").read())
hello world

>>> os.path.abspath("helloworld.py")
'C:\\Users\\testuser\\testfolder\\helloworld.py'
>>> import helloworld
hello world

nhập một chương trình để chạy nó không phải là một lựa chọn tốt. Ngay cả khi tôi đã sử dụng nó lúc đầu nhưng bây giờ tôi biết về các vấn đề tiềm ẩn như nó làm mất hiệu quả của chương trình của bạn vì bạn đang nhập nó (mặc dù không đáng kể).
Abhijeet.py

0

Có một giải pháp thay thế khác (dành cho windows) -

    import os
    os.system('py "<path of program with extension>"')

0

Trong bảng điều khiển python, người ta có thể thử 2 cách sau.

trong cùng một thư mục công việc,

1. >> nhập helloworld

# nếu bạn có một biến x , bạn có thể in nó trong IDLE.

>> helloworld.x

# nếu bạn có một hàm func , bạn cũng có thể gọi nó như thế này.

>> helloworld.func ()

2. >> runfile ("./ helloworld.py")

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.