[PySide] using QProcess to run python function

Frank Rueter | OHUfx frank at ohufx.com
Fri Jan 24 03:42:28 CET 2014


Thanks Sean and Ryan,

I'm still not quite clear on how this ties into QProcess.start()
I do have a if __name__ ... block in the script in question.
An example would certainly be awesome, but if it's less hassle, 
explaining how your and Ryan's advise helps use QProcess on a python 
module might already suffice. Maybe a simlpe example says it all though?!
I'm not using python 3 btw

Thanks guys for your help!!

frank

On 24/01/14 15:33, Sean Fisk wrote:
>
> Hi Frank,
>
> You should definitely avoid calling Python as a subprocess if you can. 
> As far as Ryan’s example, I agree with the |if __name__...| but I 
> think that using the |imp| module is a bit overkill. I would recommend 
> using Setuptool’s |entry_points| keyword 
> <http://pythonhosted.org/setuptools/setuptools.html#automatic-script-creation>. 
> Or distutils’ |scripts| keyword 
> <http://docs.python.org/2/distutils/setupscript.html#installing-scripts>, 
> if you must.
>
> An example of a well-known Python package which does this is Pygments 
> <https://bitbucket.org/birkenfeld/pygments-main>, which has a large 
> “library” component but also comes with the |pygmentize| command-line 
> script. The Pygments codebase is pretty large, so if you would like me 
> to whip up a simpler example I’d be glad to do so.
>
> Cheers,
>
> --
> Sean Fisk
>
>
> On Thu, Jan 23, 2014 at 9:17 PM, Frank Rueter | OHUfx <frank at ohufx.com 
> <mailto:frank at ohufx.com>> wrote:
>
>     Sorry if I'm being thick, but I'm not quite understanding how this
>     helps to connect a python function to qprocess?! All your code
>     does is execute the script, right?!
>     I can already call myscript.main() straight up, but maybe I'm
>     missing the point as I'm unfamiliar with the imp module.
>
>     Let me elaborate a little bit more:
>     myscript.main() calls a bunch of other python scripts that
>     (directly or through other scripts again) execute external
>     programs to do some conversion work. Those external programs spit
>     out their progress to stdout which I can see fine when I run
>     myscript.main() manually in a python terminal.
>
>     Now I need run myscript.main() via QProcess and grab stdout to do
>     be able to show a progress bar as well as show stdout and stderr
>     in a debug window inside my QT code.
>
>
>     Cheers,
>     frank
>
>
>
>
>     On 24/01/14 14:58, Ryan Gonzalez wrote:
>>     If you put an "if __name__ == '__main__'" and a main functions,
>>     you could always import the script from the GUI frontend. Example:
>>
>>     myscript.py
>>
>>     def main(argv):
>>         do_cool_stuff()
>>         return 0
>>
>>     if __name__ == '__main__':
>>         sys.exit(main(sys.argv))
>>
>>     mygui.py(Python 2):
>>
>>     import imp
>>
>>     ...
>>
>>     main = imp.load_module('myscript', *imp.find_module('myscript'))
>>
>>     main.main(my_argv)
>>
>>     mygui.py(Python 3):
>>
>>     import importlib.machinery
>>
>>     main = importlib.machinery.SourceFileLoader('myscript',
>>     'myscript.py').load_module('myscript')
>>
>>     main.main(my_argv)
>>
>>
>>     On Thu, Jan 23, 2014 at 7:48 PM, Frank Rueter | OHUfx
>>     <frank at ohufx.com <mailto:frank at ohufx.com>> wrote:
>>
>>         Hi all,
>>
>>         I got a little code design question:
>>
>>         I have a python script that does a lot of file
>>         processing/converting/uploading etc and I'd like to write a
>>         decent
>>         interface for it now.
>>         The main goal is to be able to show the user detailed info
>>         about the
>>         current step and progress as well as clean up properly in
>>         case the whole
>>         thing is cancelled.
>>
>>         My existing python code needs to stay independent of QT so any
>>         application that supports python can use it.
>>         I am wondering now how to best connect the python script and
>>         the PySide
>>         code. Should I just run the script as an argument to the python
>>         interpreter like I would with any other program? E.g.:
>>
>>         process = QtCore.QProcess(self)
>>         process.start(<path_to_python>, <path_to_python_script>)
>>
>>         As simple as this seems, it feels odd to use python to call
>>         itself as an
>>         external program.
>>
>>
>>         I'm happy to go that way but am curious how others are doing
>>         this?!
>>
>>         Cheers,
>>         frank
>>
>>         _______________________________________________
>>         PySide mailing list
>>         PySide at qt-project.org <mailto:PySide at qt-project.org>
>>         http://lists.qt-project.org/mailman/listinfo/pyside
>>
>>
>>
>>
>>     -- 
>>     Ryan
>>     If anybody ever asks me why I prefer C++ to C, my answer will be
>>     simple: "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't
>>     think that was nul-terminated."
>>
>
>
>     _______________________________________________
>     PySide mailing list
>     PySide at qt-project.org <mailto:PySide at qt-project.org>
>     http://lists.qt-project.org/mailman/listinfo/pyside
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20140124/a8fe7baa/attachment.html>


More information about the PySide mailing list