Hello Jan, Thomas

On Tuesday 06 April 2010, 05:48, Jan Holst Jensen wrote:
> On 2010-04-06 10:22, Thomas Krumbein wrote:
> > Hey,
> > 
> > in one of my basic-macros I have to call a python script and work
> > afterwards with the results - i.e. the content of a created textfile.
> > 
> > At the moment I do this using the shell service. But there are two
> > things, which I do not like:
> > - when calling the shellservice a console-window will pop in front for a
> > very short moment.
> > - the Python script create a text-file, then I read the text file.
> > Because the Basic-script do not stop on the shellservice call, I have to
> > use a wait() statemet to be sure, the file is created.
> > 
> > Is there - maybe - another way to call a python script in basic? I have
> > to call the python script with parameters and - if possible - to get a
> > flag or something back, so that I now, python script is done.
> 
> Hi Thomas.
> 
> Try this. Create a python file called test.py containing
> 
> def testMacro():
>      return "Testing from Python"
> 
> and save it in your user configuration under .../scripts/python/. On my
> Windows XP machine I have saved test.py in "C:\Documents and
> Settings\<user name>\Application
> Data\OpenOffice.org\3\user\Scripts\python\" - I had to create the
> \python\ directory myself; \Scripts\ was already there.
> 
> Check that the Python macro is seen by OOo: Open "Tools -> Macros ->
> Organize Macros -> Python..." and check that you now have a library
> called "test" with a macro in it called "testMacro".
> 
>  From a StarBasic macro you can now call the macro by-URL with
> 
> Sub Main
>    Dim MasterScriptProviderFactory as Object
>    Dim MasterScriptProvider as Object
>    Dim Script as Object
> 
>    Dim Url as String
>    Dim PythonResult as String
> 
>    Url =
> "vnd.sun.star.script:test.py$testMacro?language=Python&location=user"
>    MasterScriptProviderFactory =
> createUnoService("com.sun.star.script.provider.MasterScriptProviderFactory"
> ) MasterScriptProvider =
> MasterScriptProviderFactory.createScriptProvider("")
>    Script = MasterScriptProvider.getScript(url)
>    PythonResult = Script.invoke(Array(),Array(),Array())
> 
>    MsgBox PythonResult
> End Sub
> 
> There might be a way to load the Python library directly instead of
> by-URL so you could call the macro in a more natural way, but I didn't
> figure out how to do it. Perhaps others can help.

other than using the scripting framework as you suggested, I can only imagine 
a Python UNO  component. This way you simply use CreateUnoService() and start 
using your component's functionality .
Of course, this may be too much for his current purpose (though it's rather 
easy to design a PyUNO component...).

Regards
-- 
Ariel Constenla-Haile
La Plata, Argentina

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to