11
$\begingroup$

When I press "run script" with a python script in the Text Editor, it runs, but seems to spawn some new invisible python interpreter. I'd like it to run in the Python Console that I already have open. Is there a way to do this?

As it stands now, I'm copying and pasting from the Editor to the Console, which sure is tedious.

$\endgroup$
2
  • $\begingroup$ blenderartists.org/forum/… There may be some more recent versions, and IIRC @zeffii has something similar too. $\endgroup$
    – batFINGER
    Apr 11, 2016 at 14:41
  • $\begingroup$ Another addon. Note, that the blender python console uses InteractiveConsole. You might have a look at scripts/modules/console_python.py. $\endgroup$ Apr 12, 2016 at 8:46

3 Answers 3

17
$\begingroup$

In Blender 2.80 and higher, you can use as_module().

Blender Python Console module example

In the above example, an unsaved text editor shows this code:

def myTestFunc():
    print('This is my test function, running')

print('This is my test module, running')

Then, in the Blender Python console on the left, you can import this:

myModule = bpy.data.texts[0].as_module()

Note that since this is my only text file, I've used texts[0] to reference it. If you had multiple, you would reference by name, such as texts["Text"] or similar.

Note that anytime the source code changes, you will have to re-run the as_module() command again to pick up the changes.

Finally, I can call functions from the module I imported, like so:

myModule.myTestFunc()

This uses the variable name that was assigned by the as_module() line, and looks for a named function within that module to call.

$\endgroup$
4
  • $\begingroup$ oh I love you.. a one-liner and so simple.. $\endgroup$
    – juggler
    Apr 25, 2022 at 4:02
  • $\begingroup$ This is a good answer, but kind of a pain in the butt to need to keep running the as_module command. I can't believe that they don't provide a "Run" button to run the script in the context of the interactive python interpreter! $\endgroup$
    – uglycoyote
    Dec 14, 2022 at 4:13
  • $\begingroup$ @uglycoyote You might know this already, but in the Python console you can press the up-arrow key to recall prior commands, so you don't need to type it out each time. $\endgroup$
    – emackey
    Dec 19, 2022 at 20:13
  • $\begingroup$ I am looking for something like from myModule import * and I found a solution: globals().update(vars(myModule)) $\endgroup$
    – rint
    Dec 2, 2023 at 15:30
3
$\begingroup$

In the text editor, make sure that the code you want to run is callable (f.e. make it a function). Name the text datablock something.py). Now you can use import something in the console, and call something.yourfunc() on it.

$\endgroup$
2
  • $\begingroup$ Sadly, this appears not to work anymore in Blender 2.80. $\endgroup$
    – emackey
    Dec 3, 2019 at 21:43
  • $\begingroup$ It appears that someone wrote a new answer about this ;-) Thanks @emackey $\endgroup$
    – dr. Sybren
    Dec 4, 2019 at 9:31
-3
$\begingroup$

In Blender go to Window and select toggle system console. Do this after "run script"

$\endgroup$
0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .