[PySide] using QProcess to run python function

Frank Rueter | OHUfx frank at ohufx.com
Fri Jan 24 04:44:30 CET 2014


Much appreciated but as I mentioned, I think I jumped the gun with my 
post and should be using QThread to hook the python code to my 
QProgressBar and debug output window (QTextEdit).
I will investigate that now


On 24/01/14 16:08, Sean Fisk wrote:
> On Thu, Jan 23, 2014 at 9:42 PM, Frank Rueter | OHUfx <frank at ohufx.com 
> <mailto:frank at ohufx.com>> wrote:
>
>     Thanks Sean and Ryan,
>
>     I'm still not quite clear on how this ties into QProcess.start()
>
>
> It doesn’t tie in with |QProcess| at all. We’re advising to avoid 
> using that :)
>
>     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 will whip up a simple example for you, but it might take a few hours 
> (lots of stuff to do right now).
>
>     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/8d8dd460/attachment.html>


More information about the PySide mailing list