[PySide] using QProcess to run python function
Frank Rueter | OHUfx
frank at ohufx.com
Fri Jan 24 05:41:07 CET 2014
Great, thanks. I shall adjust my code.
I am interested in seeing how you would go about it, but let me have a
go from scratch, I will be able to understand things much better
afterwards :)
Cheers,
frank
On 24/01/14 17:38, Sean Fisk wrote:
> On Thu, Jan 23, 2014 at 10:44 PM, Frank Rueter | OHUfx
> <frank at ohufx.com <mailto:frank at ohufx.com>> wrote:
>
> 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).
>
> That would be a correct way to use |QProgressBar|. Also, for
> subprocess output, I would consider using |QPlainTextEdit| instead of
> |QTextEdit| as is is more performant with high amounts of text.
>
> If you are interested, I just wrote an asynchronous module for PySide
> for the project on which I am currently working. It is based on
> Python’s futures <http://pythonhosted.org/futures/> module and works
> great with Qt’s signals/slots. Although the project is primarily
> closed-source, I would be happy to share the async implementation with
> you. I don’t know if would fit your needs, but for us it’s much easier
> than manually spawning |QThread|s and even easier than |QThreadPool|.
>
> Good luck!
>
> 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/58d31bcf/attachment.html>
More information about the PySide
mailing list