[PySide] using QProcess to run python function

Sean Fisk sean at seanfisk.com
Fri Jan 24 04:22:43 CET 2014


Are you wanting to use QProcess or QThread because your GUI is blocked (aka
frozen, not responding)?


--
Sean Fisk


On Thu, Jan 23, 2014 at 10:06 PM, Frank Rueter | OHUfx <frank at ohufx.com>wrote:

>  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 pygmentizecommand-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>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>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
>>> 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
>> http://lists.qt-project.org/mailman/listinfo/pyside
>>
>>
>
>
>
> _______________________________________________
> PySide mailing listPySide at qt-project.orghttp://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/20140123/bb2f3269/attachment.html>


More information about the PySide mailing list