Як запустити скрипт python з інтерактивної оболонки IDLE?


102

Як запустити скрипт python з інтерактивної оболонки IDLE?

Наступна помилка:

>>> python helloworld.py
SyntaxError: invalid syntax

Як helloworld.pyвиглядає?
TerryA

Так, це означає, що з вашим кодом розміщуєте свій код!
Серіал

12
Ні, не обов’язково. Цілком ймовірно, що OP набирає python helloworld.pyу вікні оболонки IDLE, і це не працює.
Нед Дейлі

Також це не працює в стандартному перекладачі. Ця проблема виникла раніше, коли люди помилково думають, що запит інтерпретатора є командним рядком.
Террі Ян Ріді

Ви повинні прийняти відповідь від Неда Ділі, якщо він відповість на ваше питання правильно. Це також допоможе колегам-розробникам швидко визначити правильну відповідь.
Крішна Оза

Відповіді:


141

Python3 :

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

Якщо ваш файл не в одному режимі:

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

Див. Https://stackoverflow.com/a/437857/739577 для передачі глобальних / локальних змінних.


У застарілих версіях Python

Python2 Вбудовані функції: ExecFile

execfile('helloworld.py')

Зазвичай це не можна викликати аргументами. Але ось вирішення:

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

Застаріло з 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

З аргументами:

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

Попереднє використання: підпроцес

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

З аргументами:

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

Детально прочитайте документи :-)


Перевірено з цим базовим helloworld.py:

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

2
Чи можете ви, будь ласка, додати приклад з аргументами командного рядка.
ViFI

1
Не працює з Python3, і запитувач не вказав явно версію Python
Suncatcher

Додано execдля Python3
Hugues Fontenelle

35

Ви можете використовувати це в python3:

exec(open(filename).read())

24

Вікно оболонки IDLE не збігається з термінальною оболонкою (наприклад, працює shабо bash). Скоріше, це як би бути в інтерактивному інтерпретаторі Python ( python -i). Найпростіший спосіб запуску сценарію в IDLE - це використання Openкоманди з Fileменю (це може дещо відрізнятися залежно від того, на якій платформі ви працюєте), щоб завантажити файл сценарію у вікно редактора IDLE, а потім скористатися командою Run-> Run Module(ярлик F5).


1
Але ви не можете передати аргументи. :(
Еріка Кейн

3
На жаль, ні, запустити файл Python в IDLE непросто, передаючи аргументи командного рядка. Існує давнє відкрите питання для IDLE для цього ( bugs.python.org/issue5680 ). Одне рішення для тестування - це вручну ініціалізуватися sys.argvна самому початку програми, наприклад, під звичайною if __name__ == "__main__"котловою панеллю.
Нед Дейлі

Ця відповідь пояснює, чому ми не можемо запустити скрипт python за допомогою оболонки IDLE. Дякуємо @NedDeily
arsho

1
Станом на IDLE 3.7.4, тепер ви можете запустити модуль з аргументами. Використовуйте команду new Run-> Run with Customized...(ярлик Shift + F5), і відкриється спливаюче вікно, де ви можете надати свої аргументи. На жаль, наразі вони не пам’ятають їх, тому ви будете вставляти їх з кожним пробігом.
Дан Нолан

6

Спробуйте це

import os
import subprocess

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

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

4

execFile('helloworld.py')робить роботу для мене. Що слід зазначити, це ввести повне ім’я файлу .py-файлу, якщо він не знаходиться в самій папці Python (принаймні, це так у Windows)

Наприклад, execFile('C:/helloworld.py')



2

Наприклад:

import subprocess

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

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

2
subprocess.call(r'c:\path\to\something.py')не працює для мене. OSError: [WinError 193]% 1 не є дійсною програмою Win32
Terry Jan Reedy

Спробуйте це імпортувати підпроцес імпорту DIR = os.path.join ('C: \\', 'Користувачі', 'Сергій', 'Робочий стіл', 'a.py') subprocess.call (['python', DIR] )
Сергій Носов

1

У Python 3 немає execFile. Можна використовувати execвбудовану функцію, наприклад:

import helloworld
exec('helloworld')

1

В IDLE працює наступне:

import helloworld

Я не знаю багато про те, чому це працює, але це робить ..


що ви робите - це завантаження модуля, який не працює з оболонки. одна різниця між двома: 1) Завантаження модуля назва вашого модуля ім'я __ = ім'я файлу 2) запустіть з імені модуля оболонки _name __ = " _main "
tanweer alam

Це не гарний спосіб запускати програми, оскільки ви насправді імпортуєте та не запускаєте їх. Її вміст буде імпортовано, і це буде безглуздо, якщо ви не хочете їх використовувати.
Abhijeet.py

1

Для запуску сценарію python в оболонці python, такому як Idle або в оболонці Django, ви можете виконати наступні дії за допомогою функції exec (). Exec () виконує аргумент об'єктного коду. Кодовий об’єкт в Python - просто скомпільований код Python. Отже, спочатку потрібно скомпілювати файл сценарію, а потім виконати його за допомогою exec (). З вашої оболонки:

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

Я використовую Python 3.4. Докладні відомості див. У документах компіляції та виконання .


1

Я перевірив це, і це щось виходить:

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

дякую за підказку, це працювало для мене. Отримано.
Forever Learner

1

це можна зробити двома способами

  • import file_name

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

але переконайтеся, що файл повинен зберігатися там, де працює ваша програма


0

У середовищі Windows ви можете виконати файл py у командному рядку оболонки Python3 із таким синтаксисом:

exec (відкрити ("абсолютний шлях до імені файлу"). read ())

Нижче пояснено, як виконати простий файл helloworld.py з командного рядка оболонки python

Розташування файлу: C: /Users/testuser/testfolder/helloworld.py

Вміст файлу: print ("привіт світ")

Ми можемо виконати цей файл на оболонці Python3.7 як нижче:

>>> 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

імпорт програми для запуску - це не хороший варіант. Навіть я використовував його на початку, але тепер я знаю про можливі проблеми, як-от це забирає ефективність вашої програми, оскільки ви її імпортуєте (хоча і незначно).
Abhijeet.py

0

Є ще одна альтернатива (для Windows) -

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

0

У консолі пітона можна спробувати наступні 2 способи.

під тим самим робочим каталогом,

1. >> імпорт helloworld

# якщо у вас є змінна x , ви можете її надрукувати в IDLE.

>> helloworld.x

# якщо у вас є функція func , ви також можете назвати її так.

>> helloworld.func ()

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.