запустить программу в оболочке Python

У меня есть демонстрационный файл: test.py. В консоли Windows я могу запустить файл с помощью: C:\>test.py

Как я могу вместо этого выполнить файл в оболочке Python?


person daniel__    schedule 14.09.2011    source источник
comment
Что вы имеете в виду под оболочкой Python? Вы запускали python из командной строки? Или вы используете IDLE или другую программу, которая также может предоставлять подсказку Python >>>?   -  person S.Lott    schedule 14.09.2011


Ответы (6)


Используйте execfile для Python 2:

>>> execfile('C:\\test.py')

Используйте exec для Python 3.

>>> exec(open("C:\\test.py").read())
person phihag    schedule 14.09.2011
comment
в версии 3 (моя версия) эквивалент: exec (open (C: \\ test.py) .read ()). Благодарность! - person daniel__; 14.09.2011
comment
@loops Я получаю: SyntaxError: (Unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \uXXXX excape. Что это значит? Я попытался изменить кодировку моего документа .py на Unicode, но это не дало никакого эффекта. - person Musixauce3000; 07.04.2016
comment
@loops - Хорошо, я только что узнал о \U экранировании Unicode. Очевидно, вы избежите его непонимания, продублировав все обратные косые черты, за которыми следует U. Но это приводит к появлению недопустимого аргумента OSError 22 'c:\\users\username\\desktop\\test.py', что довольно странно, потому что я только продублировал обратную косую черту в \Users. Почему ошибка показывает, что я продублировал все обратные косые черты, кроме той, за которой следует имя пользователя? - person Musixauce3000; 07.04.2016
comment
@ Musixauce3000 Пожалуйста, задайте новый вопрос. - person phihag; 07.04.2016
comment
добавьте 'r' в начале, если вы получите кодек SyntaxError: (Unicode error) unicodeescape ... Следовательно, это будет exec (open (rC: \\ test.py) .read ()). - person Subhashi; 20.09.2017
comment
@phihag, версия Python 3 многословна. Есть ли ожидаемые проблемы с определением execfile = lambda file: exec(open(file).read())? - person alancalvitti; 03.01.2020
comment
@alancalvitti Нет, это звучит разумно, если по какой-либо причине вы хотите часто запускать файлы. - person phihag; 03.01.2020

Если вы хотите запустить скрипт и закончить его приглашением (чтобы вы могли проверять переменные и т. Д.), Используйте:

python -i test.py

Это запустит сценарий, а затем перейдет в интерпретатор Python.

person Chris Phillips    schedule 14.09.2011
comment
Как насчет того, чтобы моего сценария нет в файле? - person Dimitri Kopriwa; 18.02.2021

Это зависит от того, что находится в test.py. Ниже приводится подходящая структура:

# suppose this is your 'test.py' file
def main():
 """This function runs the core of your program"""
 print("running main")

if __name__ == "__main__":
 # if you call this script from the command line (the shell) it will
 # run the 'main' function
 main()

Если вы сохраните эту структуру, вы можете запустить ее следующим образом в командной строке (предположим, что $ - это приглашение командной строки):

$ python test.py
$ # it will print "running main"

Если вы хотите запустить его из оболочки Python, вам просто нужно сделать следующее:

>>> import test
>>> test.main() # this calls the main part of your program

Нет необходимости использовать модуль subprocess, если вы уже используете Python. Вместо этого попробуйте структурировать файлы Python таким образом, чтобы их можно было запускать как из командной строки, так и из интерпретатора Python.

person Escualo    schedule 14.09.2011

Для более новой версии Python:

exec(open(filename).read())
person Victor    schedule 03.06.2017

Если вы не хотите писать все это каждый раз, вы можете определить функцию:

def run(filename):
    exec(open(filename).read())

а затем назовите это

run('filename.py')
person Hugo Trentesaux    schedule 06.08.2018
comment
Это не работает для моего варианта использования, поскольку не импортирует переменные. Я не совсем уверен, почему бы и нет. - person wjandrea; 08.02.2021

Из этой же папки вы можете:

import test
person Brendan Long    schedule 14.09.2011