2014-02-05 4 views
0

В Matlab при запуске скрипта переменные остаются в памяти и у вас есть доступ к оболочке. Я считаю, что это действительно полезно для отладки и изучения. Я пытаюсь добиться подобного эффекта в Python. Возможно, это даже невозможно.Оставить переменные в памяти после выполнения

В качестве примера предположим, что у меня есть файл с именем script.py

#!/usr/bin/env python 

def foo(n): 
    return 2*n 

x = 5 
y = foo(5) 

Я хочу, чтобы иметь возможность запускать это и иметь доступ к x и y в оболочке Python. Я попробовал >>> import script, который дает мне доступ к foo через script.foo(), но я хочу получить доступ к x и y тоже.

>>> from script import * также не выполняет свою работу.

Как сделать python оставить эти (в памяти) в оболочке python для меня?

+0

Под оболочкой, вы имеете в виду linux shell? или Python REPL? – thefourtheye

+3

Попробуйте флаг '-i'. – ooga

+0

@thefourtheye: Я хочу оболочку python, в терминале linux. На самом деле я был бы доволен любым разумным и простым способом заставить его работать. Я никогда не слышал о REPL. Это то, как работает обычная оболочка python, или другой способ запускать вещи? – mrKelley

ответ

5

Самый простой способ добиться этого, запустив скрипт с -i флагом (что означает «проверять в интерактивном режиме»).

python -i my_script.py 

скрипт будет работать, а затем Python оболочка будет показана подсказка >>>, что позволяет взаимодействовать с переменными, что сценарий создан.

Другим хорошим вариантом было бы установить IPython, что добавит некоторые дополнительные функции в базовую оболочку Python. В рамках сеанса IPython вы можете позвонить по телефону

%run my_script.py 

чтобы получить такой же эффект. IPython должен быть доступен в репозиториях вашего дистрибутива Linux.

+0

Флаг '-i' был именно тем, что я искал. Благодаря ооге тоже! – mrKelley

1

Вы можете использовать модуль pdb для ввода отладчика в любой конкретной точке. Например:

import pdb 

def foo(n): 
    pdb.set_trace() # <-- enters debugger here 
    return 2*n 

x = 5 
y = foo(5) 
Смежные вопросы