Sign in to follow this  

Making Python a scripting language for C functions

This topic is 2489 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I want to make Python a scripting language for regular C/C++ functions. For example, I have a particle emitter that will accept a starting position, but instead of using a custom scripting language I would like to use Python to initialize it. How in the world can I do that?

Share this post


Link to post
Share on other sites
That's a really vague question. You could use the raw Python [url=http://docs.python.org/extending/]extending and embedding[/url] interface or a binding library like boost::python or SWIG.

Share this post


Link to post
Share on other sites
You don't run YOUR C functions directly. You write wrapper functions in C that take python object parameters and perform the necessary translation to then call your C functions. Google.

Share this post


Link to post
Share on other sites
[quote name='BEHOLDER192875' timestamp='1297832514' post='4774817']
I get how to run Python script from C. How do I run C functions in Python?
[/quote]
[quote name='SiCrane' timestamp='1297827952' post='4774800']
That's a really vague question. You could use the raw Python [url=http://docs.python.org/extending/]extending and embedding[/url] interface or a binding library like boost::python or SWIG.
[/quote]

Share this post


Link to post
Share on other sites
Thanks for telling me about SWIG. I looked at the implications of it, but I believe for my purposes it may be too much control over my C program. Not too sure yet.

Anyway, I created a script reader using C/C++. I'm certain that Python would make the script reading easier because of its string parsing capabilities. I was mostly trying to get the Python script to run in place of the current script reader. I'm hoping it would give me more options than just writing variables to a file, like loops, if statements, and random numbers [not too sure if it can do that]. I have a huge enum showing all values available for commands, and I have a couple functions that convert strings in the file to their number counterpart.

Efficiency questions:
Should I remake the script reader into Python?
Does this seem like a sensible thing to do for a game engine?

If I do that, then I would essentially be creating multiple functions to incorporate the base commands, and then I would have to convert that command into a number for the C program to interpret. I would be running the base script and then loading multiple files while assuming the functions will always be there until Python exits. A problem I may run into is that I may want to stop the scripting for a frame, and start running another one. I'm assuming this may cause multiple problems with overwriting variables previously declared.

Can I run Python during run-time of a game without having the window for it open so I won't have lag time for it loading OR is incorporating Python in the program using #include <Python.h> [and of course Py_Initialize()] already do this?

Thanks for your help so far.

Share this post


Link to post
Share on other sites
Python itself is just a language - if you embed the Python DLL in a C++ program there is no window at all. If you are seeing a window when using Python this must be because you are running some sort of program - eg. IDLE, the simple Python development environment.

I don't know what you mean by "script reader" - if you are reading and executing the script then that is exactly what a scripting language is for. You wouldn't use the Python string handling to understand the script - you write the scripts themselves in Python and the Python language executes it directly.

As for stopping scripting for a frame and resuming it later, Python does not allow that. You can't stop a Python function half way through - Python just continues executing the code until it reaches the end, at which point you end up back in your C code. To some degree you can fake this sort of functionality using Stackless Python but that is a very complex system.

If all you want to do is read in some data to initialise variables then a language like Lua is a better choice - it's smaller, quicker, and was designed for this sort of task.

Share this post


Link to post
Share on other sites

This topic is 2489 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this