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

103

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

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

>>> python helloworld.py
SyntaxError: invalid syntax
tshepang
источник
Как 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])
Hugues Fontenelle
источник
2
Не могли бы вы также добавить пример с аргументами командной строки.
ViFI
1
Не работает с Python3, и автор вопроса не указал версию Python явно
Suncatcher
Добавлено execдля Python3
Hugues Fontenelle
35

Вы можете использовать это в python3:

exec(open(filename).read())
FacePalm
источник
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')

optimistic_kid
источник
4

САМЫЙ ПРОСТОЙ СПОСОБ

python -i helloworld.py  #Python 2

python3 -i helloworld.py #Python 3
Леонард
источник
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. См. Подробную информацию в документации по компиляции и запуску .

y2knoproblem
источник
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
Vinsinraw
источник
Импорт программы для ее запуска - не лучший вариант. Даже я использовал его вначале, но теперь я знаю о потенциальных проблемах, например, о том, что это снижает эффективность вашей программы, потому что вы ее импортируете (хотя и незначительно).
Abhijeet.py
0

Есть еще одна альтернатива (для windows) -

    import os
    os.system('py "<path of program with extension>"')
Abhijeet.py
источник
0

В консоли Python можно попробовать следующие 2 способа.

в том же рабочем каталоге,

1. >> импортировать helloworld

# если у вас есть переменная x , вы можете распечатать ее в IDLE.

>> helloworld.x

# если у вас есть функция func , вы также можете называть ее так.

>> helloworld.func ()

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

LynnSunshine
источник