[PySide] using QProcess to run python function

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


Actually, it's dawning on me that QProcess may be the wrong thing to use 
here, I guess I should consider using QThread instead, seeing all the 
code I need to run is Python anyway!?
I was just experimented with QProcess running the external programs 
directly for testing so I kinda got stuck in thinking this is the way to 
go (since I got it all wired up to my UI already).




On 24/01/14 15:42, Frank Rueter | OHUfx wrote:
> 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
>>
>>
>
>
>
> _______________________________________________
> PySide mailing list
> 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/d9dede38/attachment.html>


More information about the PySide mailing list