13
$\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$ Commented 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$ Commented Apr 12, 2016 at 8:46

3 Answers 3

18
$\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$ Commented 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$ Commented 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$ Commented 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$ Commented 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$ Commented Dec 3, 2019 at 21:43
  • $\begingroup$ It appears that someone wrote a new answer about this ;-) Thanks @emackey $\endgroup$ Commented 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.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.