Oh, I see. I just misunderstood. Good luck with it!
-- Sean Fisk On Thu, Jan 23, 2014 at 11:39 PM, Frank Rueter | OHUfx <[email protected]>wrote: > What you are suggesting is exactly how it works. Pyside will import the > other python module and runs it's main function via one extra QThread. > That function will import other python code, some of which runs subprocess > on the external program. > The latter has to report back to PySide and drive the debug output > > > > > > > > On 24/01/14 17:30, Sean Fisk wrote: > > On Thu, Jan 23, 2014 at 10:39 PM, Frank Rueter | OHUfx > <[email protected]>wrote: > >> I might have lead you on a wild goose chase: >> >> I have working python code that calls external process (using >> subprocess.Popen) and now I am writing a UI for it. >> >> To get started I wrote a simple UI that connected to one of those >> external programs directly to establish the frame work for the new code and >> figure out how to properly handle the external programs stdout and stderr, >> be able to display things and cancel it from within my UI. >> After getting all that to work I thought all I have to do is connect to >> my actual python code rather than directly to the external program, and >> that is where I assumed QProcess to be able to do this, when instead I >> shuold simlpy switch to use QThread and reire that to give me access to >> stdout, be able to cancel it etc. >> So what I am trying to do is simply this: >> >> PySide UI --- calls --> pure python --- calls --> pure python --- calls--> >> external program >> >> With the stdout of external program and the pure python apps being piped >> into the PySide UI for processing. >> > I assume each of these is in its own process: > > |process| | process | | process | | process | > PySide UI -> pure Python -> pure Python -> external program > > Since creating processes is somewhat expensive, have you considered the > following? > > | process | | process | > PySide UI -> pure Python -> pure Python -> external program > ^ ^ ^ > imports imports subprocess > > This would be ideal if import is a possibility. Apologies for the crude > drawings :) > >> >> >> Sorry if I wasted your time :/ >> > >> >> >> frank >> >> >> >> >> On 24/01/14 16:22, Sean Fisk wrote: >> >> 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 >> <[email protected]>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 >>> <[email protected]>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 >>>> <[email protected]>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 >>>>> [email protected] >>>>> 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 >>>> [email protected] >>>> http://lists.qt-project.org/mailman/listinfo/pyside >>>> >>>> >>> >>> >>> >>> _______________________________________________ >>> PySide mailing >>> [email protected]http://lists.qt-project.org/mailman/listinfo/pyside >>> >>> >>> >>> _______________________________________________ >>> PySide mailing list >>> [email protected] >>> http://lists.qt-project.org/mailman/listinfo/pyside >>> >>> >> >> > >
_______________________________________________ PySide mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/pyside
