[PySide] using QProcess to run python function

Sean Fisk sean at seanfisk.com
Fri Jan 24 03:33:53 CET 2014


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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20140123/d36dbcf9/attachment.html>


More information about the PySide mailing list