Как запустить скрипт Python из интерактивной оболочки IDLE?


103

Как запустить скрипт python из интерактивной оболочки IDLE?

Следующее вызывает ошибку:

>>> python helloworld.py
SyntaxError: invalid syntax

Как helloworld.pyвыглядит?
— TerryA

да, это означает, что что-то не так с вашим кодом, пост ваш код!
— Серийный номер

12
Нет, не обязательно. Скорее всего, OP печатает python helloworld.pyв окне оболочки IDLE, и это не работает.
— Нед Дейли

И в стандартном интерпретаторе это не сработает. Эта проблема возникала раньше, когда люди ошибочно думали, что приглашение интерпретатора - это приглашение командной строки.
— Терри Ян Риди,

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

Ответы:


144

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


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 08

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
— Терри Ян Риди,

Попробуйте этот подпроцесс импорта os import DIR = os.path.join ('C: \\', 'Users', 'Sergey', 'Desktop', '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 (open ('абсолютный путь к имени_файла'). 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

В консоли Python можно попробовать следующие 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.