volcano wrote:

> volcano wrote:
> > Hello, folks!
> > A trivial question - I have a working Python script that I have to
> > invoke from C++ code. No fancy stuff - just run the whole script with
> > its parameters. No callbacks, no signalling - nada, just
> > stupid,primitive, straightforward call.
> >
> > And while there is a lot of help on embedding, I could not find out how
> > to run script as a whole.SOS!!!!
>
> Thanks a lot to all of you who cared to answer! Eventually it was
> "::CreateProcess", and it works!
>

I used to find http://pinvoke.net a good resource when I was doing
Active Directory stuff.  Just for interest's sake, cutting and pasting
from the CreateProcess page, the following arcana will start Python (
again from C#, but here you can see the internals at least):

using System;
using System.Runtime.InteropServices;

class Class1
{
        [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
        public struct STARTUPINFO
        {
                Int32 cb;
                string lpReserved;
                string lpDesktop;
                string lpTitle;
                Int32 dwX;
                Int32 dwY;
                Int32 dwXSize;
                Int32 dwYSize;
                Int32 dwXCountChars;
                Int32 dwYCountChars;
                Int32 dwFillAttribute;
                Int32 dwFlags;
                Int16 wShowWindow;
                Int16 cbReserved2;
                IntPtr lpReserved2;
                IntPtr hStdInput;
                IntPtr hStdOutput;
                IntPtr hStdError;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct PROCESS_INFORMATION
        {
                public IntPtr hProcess;
                IntPtr hThread;
                public int dwProcessId;
                public int dwThreadId;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct SECURITY_ATTRIBUTES
        {
                public int nLength;
                public IntPtr lpSecurityDescriptor;
                public int bInheritHandle;
        }

        [DllImport("kernel32.dll")]
        public static extern bool CreateProcess(string lpApplicationName,
                string lpCommandLine, ref SECURITY_ATTRIBUTES 
lpProcessAttributes,
                ref SECURITY_ATTRIBUTES lpThreadAttributes, bool 
bInheritHandles,
                uint dwCreationFlags, IntPtr lpEnvironment, string
lpCurrentDirectory,
                ref STARTUPINFO lpStartupInfo,
                out PROCESS_INFORMATION lpProcessInformation);

        [STAThread]
        static void Main(string[] args)
        {
                const uint NORMAL_PRIORITY_CLASS = 0x0020;

                bool retValue;
                string Application = @"c:\python\python24\python.exe";
                string CommandLine = "";
                PROCESS_INFORMATION pInfo = new PROCESS_INFORMATION();
                STARTUPINFO sInfo = new STARTUPINFO();
                SECURITY_ATTRIBUTES pSec = new SECURITY_ATTRIBUTES();
                SECURITY_ATTRIBUTES tSec = new SECURITY_ATTRIBUTES();
                pSec.nLength = Marshal.SizeOf(pSec);
                tSec.nLength = Marshal.SizeOf(tSec);

                retValue = CreateProcess(Application,CommandLine,
                        ref pSec,ref tSec,false,NORMAL_PRIORITY_CLASS,
                        IntPtr.Zero,null,ref sInfo,out pInfo);

        }
}

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to