Re: Re: Have existing python script file that I want to execute from within a cherrypy web site/page. How can this be done 100% native to cherrypy?
Sviatoslav Sydorenko <[email protected]> Sun, 6 May 2018 03:09:05 +0200
| Newsgroups | gmane.comp.python.cherrypy |
|---|---|
| Message-ID | <CAFYONRCF07xOW1s0BpEX9_D2gA4U1VXRQP4zy_bsxOPyYzFr5w@mail.gmail.com> |
Just as a tip, in Ansible when running tests we normally try to figure out the absolute executable path and then pass that to all process spawning functions to be explicit about what we run: https://github.com/ansible/ansible/blob/6352e67/test/runner/lib/util.py#L129 2018-05-06 2:37 GMT+02:00 Jibun no Kage <[email protected]>: > Red Hat! Wow. I have quite a few friends at Red Hat, US based. Cool. I > worked for a Fortune 50 Bank, for many years, designed several > virtualization standards for same. Red Hat has recruited from the same > Fortunate 50 Bank for years, even a former boss of mine now is at RH. I > know a number of the guys on the CloudForms sales and consulting team, if > you are familiar with CloudForms. > > I read through the VirtualEnv documentation, yup, it is just isolation in > simple form, in my world (of virtualization) we would call this a 'type' of > application isolation, but... it not as sophisticated as Docker even, > true. Agree, I think your comment "My point is that when running app and > subprocesses you may unintentionally switch versions" is exactly what > might, likely is happening at some point, this is what I was thinking when > I said the CherryPy software stack is just exposing something odd... it > just happens to happen, when CherryPy is used. It could happen via other > scenarios as well of course. > > To tackle the scenario, I am setting up a 'qualified' reference platform, > that I am going to make everyone validate against. The reference platform > will be explicitly documented, configuration via Ansible, etc., to make > sure it is always consistent. Since I will need explicit control of what > modules, versions etc. used, will be able to have greater control. I do > plan to use Pipenv as well, but will need to spend some time with it. > > Schorschi > > > On 05/05/2018 17:19, Sviatoslav Sydorenko wrote: > > > > 2018-05-06 0:48 GMT+02:00 Jibun no Kage <[email protected]>: > >> Not to debate, from my perspective, you are talking about virtualization, >> about application virtualization. Per the link ( >> https://virtualenv.pypa.io/en/stable/) you sent me, "In all these cases, >> virtualenv can help you. It creates an environment that has its own >> installation directories, that doesn’t share libraries with other >> virtualenv environments (and optionally doesn’t access the globally >> installed libraries either)." That is 'application' virtualization from my >> perspective. :) >> > > Well, my assumption might be wrong, but I have a feeling that you might > not realize how virtualenv works. While it contains word "virtual" it's > still not a typical virtualization, nor isolation. Yes, it creates a > separate "env" folder with binaries linked against some other (system) > installation of python and site-packages, which won't collide with that > system install of python. So you add that thing to $PATH or invoke directly. > My point is that when running app and subprocesses you may unintentionally > switch versions when being not careful (for example, when you reset/erase > env vars available for subshell). And since I don't know anything about how > you run web app and scripts it is hard for me to point where to look closer. > So logging executable path and env vars would help you figure out more > details about this. > > >> >> As for code examples, I can't publish the explicit code, if I could, I >> would have. I realize this limits your assistance, just the same, thanks >> for the insight, and suggestions, you have helped, I appreciate it. >> > > You don't have to expose any of your super secret business logic or so. > The rule of thumb is to post minimal amount of similar code, which might > contain dummy "hello world", but still show how exactly to spawn > subprocesses, which from your words looks like: > > *cp_app.py:* > import os > import cherrypy > > class RootWebApp: > @cherrypy.expose > def index(self): > exec_result = os.subprocess.run(['/path/to/specific/py/env/bin/python', > 'some_script.py']) # might be different and in fact has lots of arguments > to play with. > return exec_result.stdout > > @classmethod > def run(cls): > cherrypy.quickstart(cls(), '', {}) > > > def main(): > * RootWebApp.run()* > > > *__name__ == '__main__' and main()* > > > *some_script.py: def main():* > print('Hello world!') > > > *__name__ == '__main__' and main()* > > As you can see, your example doesn't have to include any logic specific to > your project, but to your env and the way your components interact with > each other. This would help with troubleshooting. > > >> Since your domain is UA... you are in Ukraine? I spent most of my >> summers as a kid in Germany, even got to visit Hungry, Poland and Yugoslavia >> (when it still existed), even East Germany once, but I never got to the >> Ukraine. Maybe when I retire and have time, I can get back to Eastern >> Europe again. >> > > I used to live in Ukraine for my whole life, but 3 months ago I moved to > Brno, Czech Republic for Red Hat :) > > >> >> >> Schorschi >> >> >> On 05/05/2018 02:28, Sviatoslav Sydorenko wrote: >> >> I'm not talking about virtualization at all. I only mentioned >> https://virtualenv.pypa.io/en/stable/ >> There's also Pipenv which exposes a bit more full feature set >> https://packaging.python.org/tutorials/managing-dependencies/ >> >> Besides this, I cannot help you with your problem, because this would >> require you posting a real code example with a reproducible issue. >> >> 2018-05-05 2:57 GMT+02:00 Jibun no Kage <[email protected]>: >> >>> I am under the impression you did not see my other note, showing an an >>> example of the odd scenario I found, where the non-CherryPy environment >>> software 'stack' accepts an enum based on a simple class definition, but >>> the CherryPy inclusive environment software 'stack' does not. Believe >>> CherryPy is exposing something odd, rather than creating something odd, as >>> I noted before. >>> >>> Yes, virtualization is a best practice, and where and when we can use >>> it, it is, but not all micro-controller environments can be emulated, for >>> example BCM processors are very hard to emulate under Qemu. I have design >>> and supported virtual labs and large scale production environments for over >>> 16 years, just about every variant of VMware, KVM, and even Hyper-V (and >>> Microsoft Virtual Server before Hyper-V). Moreover, running applications >>> in slices, in such as things like docker (even LXC) is a best practice when >>> possible, application virtualization versus OS virtualization. But >>> micro-controllers are often so specialized and narrow in resource scope, >>> that is not an option. The interesting scenario is when ARM (as now ATOM) >>> based systems continue to scale up, from 32bit to 64bit, greater than 1GB >>> RAM, etc., more CPU cores, etc. Then, realistic partitioning of >>> micro-controllers will be possible. Looking forward to it. >>> >>> Side note, much of VMware's ESXi server solution, under the hood/behind >>> the scenes, leverages quite a bit of python in its control (console) >>> environment. My first experience with python came from its internal use in >>> ESXi. >>> >>> Schorschi >>> >>> >>> On 05/04/2018 15:16, Sviatoslav Sydorenko wrote: >>> >>> First of all, it's not CherryPy picking interpreter, but vice versa - >>> you run CherryPy app under a certain interpreter (better explicitly chosen). >>> Also, I advise you to check sys.executable to learn which binary exactly >>> you use. >>> Finally, it is best practice to use a virtualenv to isolate environments >>> for different apps you run. >>> >>> --Sviatoslav. >>> >>> Sent from my phone, please pardon any typos. >>> >>> On Fri, May 4, 2018, 21:45 Jibun no Kage <[email protected]> wrote: >>> >>>> Ah... Yes, I know how shebang works. But, I had not worried about it, >>>> since the expectation was that everything would be completely python 2. I >>>> went snooping... all the 'existing' child scripts, are 'banged' explicitly >>>> to Python2. However, one of my test scripts, I was using/learning CherryPy >>>> was not explicitly qualified. So I added a bit of code to the CherryPy >>>> script and left it NOT banged on purpose to see what CherryPy was >>>> defaulting to: >>>> >>>> >>> Sys Get Version 2 >>>> >>> Platform Get Version 2.7.13 >>>> >>>> So CherryPy defaults to system default, and it is version 2, the child >>>> scripts are directed to version 2 via shebang. All the modules used by the >>>> child scripts were developed in a version 2 context. Moreover, I modified >>>> one of the child scripts to report what version bash was defaulting to when >>>> invoked by bash, a sanity check to validate, and it also reported version 2. >>>> >>>> Child script direct invocation... >>>> [2018-05-04 19:27:13 UTC] >>> Platform Get Version 2.7.13 >>>> [2018-05-04 19:27:13 UTC] >>> Sys Get Version 2 >>>> >>>> Child script indirect invocation via the os shell/bash trick... >>>> [2018-05-04 19:29:43 UTC] >>> Platform Get Version 2.7.13 >>>> [2018-05-04 19:29:43 UTC] >>> Sys Get Version 2 >>>> >>>> So the OS default is 2, the scripts with os module direction are >>>> version 2, the CherryPy defaults to 2, the subprocess defaults to 2. >>>> >>>> So there is still something different between module load into CherryPy >>>> and invoking it, and module load into child script and then invoking it, >>>> the child script invoking always works, the module load to CherryPy then >>>> invoking, never works, the modules that exhibit the issue. I will find it, >>>> in due course, because like we agreed, really want to import the modules >>>> and just use them directly, and avoid the os shell/bash trick. At this >>>> point it has to be something really odd, tripping it. Likely, it is some >>>> funky code in the module that is not very pythontic as it should be, since >>>> we do a lot of micro-controller/hardware driving python coding. >>>> >>>> Not to confuse things, but I already found one issue and resolved it, >>>> in our development lab. It had to do with different enum modules clashing, >>>> I discovered that 'enum34' was conflicting with 'enum' module. On one >>>> specific system, the modules installed was incorrect, got to love when >>>> (many) developers touch stuff... oh... wait, I am one of the developers. >>>> Ouch. >>>> >>>> And, thanks for the comments and insight, appreciate it. >>>> >>>> Schorschi >>>> >>>> >>>> >>>> On 05/03/2018 22:45, Sviatoslav Sydorenko wrote: >>>> >>>> 1) You run CherryPy correctly, but it doesn't matter, because you >>>> obviously run the scripts themselves in a way that they might choose >>>> different Python env or even version. Do you know about shebang, for >>>> example? Anyway, you didn't provide sufficient details to know what happens >>>> exactly. >>>> 2) Running scripts is not CherryPy specific, it's just Python. There's >>>> no connection of your problem with CherryPy, this is not something which >>>> has to be documented. >>>> 3) My guess is that you just don't know how os.subprocess or bash >>>> executable lookup works. However I cannot be sure, because you did not show >>>> any reproducible examples of code you think you have problems with. >>>> >>>> --Sviatoslav. >>>> >>>> Sent from my phone, please pardon any typos. >>>> >>>> On Fri, May 4, 2018, 03:28 Jibun no Kage <[email protected]> wrote: >>>> >>>>> That could be, but how would anyone know? When I run python <script >>>>> name>.py (which is a CherryPy) script, I am executing the default python >>>>> for the environment, which happens to be 2.7.x. The CherryPy examples to >>>>> not qualify doing anything different. For example... >>>>> >>>>> import cherrypy >>>>> >>>>> class HelloWorld(object): >>>>> >>>>> @cherrypy.expose >>>>> >>>>> def index(self): >>>>> return "Hello world!" >>>>> >>>>> if __name__ == '__main__': >>>>> cherrypy.quickstart(HelloWorld()) >>>>> >>>>> Run as "python <script name>.py" This is taken straight from the >>>>> online CherryPy official documentation. So, I should be 100% python >>>>> version consistent, regardless of the invocation. Of it was otherwise, >>>>> then CherryPy documentation should be explicit on this point, no? None of >>>>> the modules I am calling other than CherryPy as imported python 3 >>>>> specific. Well, less the pending backports, when I get to that point. >>>>> >>>>> Schorschi >>>>> >>>>> On 05/02/2018 14:53, Sviatoslav Sydorenko wrote: >>>>> >>>>> It *is supported*, but you are doing it wrong. So it looks to me that >>>>> you are spawning python3 interpreter from within python2 process. >>>>> >>>>> 2018-05-02 23:36 GMT+02:00 Jibun no Kage <[email protected]>: >>>>> >>>>>> Thanks for the suggestions. Unfortunately, at this time I can't >>>>>> address Python 3. Python 2 only environment at the moment. Odd, CherryPy >>>>>> documentation states that Python 2.7 is supported, but not surprised >>>>>> something tripped up. Long term, as we revise the classes, migrate off of >>>>>> Python 2, expect to import and use them directly, as you suggest. >>>>>> >>>>>> Schorschi >>>>>> >>>>>> >>>>>> On 04/28/2018 23:21, Sviatoslav Sydorenko wrote: >>>>>> >>>>>> 1) don't use os module to spawn subprocesses, just have a function in >>>>>> those modules, import it and call it then. >>>>>> 2) you probably wrote scripts in a manner/syntax, which is >>>>>> incompatible with Python 3 and run CherryPy under Python 3. Or maybe just a >>>>>> way you run scripts is different when you spawn subprocesses. Anyway, I'd >>>>>> recommend you to not use subprocesses and do normal direct imports. >>>>>> To mitigate cross python compatibility problems I strongly recommend >>>>>> you writing scripts using syntax, which works in both or completely switch >>>>>> to Python 3. >>>>>> Look for a package distribution called "six", it may provide you some >>>>>> helpers for cross compat. >>>>>> >>>>>> --Sviatoslav. >>>>>> >>>>>> Sent from my phone, please pardon any typos. >>>>>> >>>>>> >>>>>> On Sun, Apr 29, 2018, 06:12 <[email protected]> wrote: >>>>>> >>>>>>> Yeah, I got a variant of it working. Not sure it is pretty, but >>>>>>> works. We have a lot of existing python scripts we want to continue to use >>>>>>> from console (Linux). We just wanted to wrapper these with some simple web >>>>>>> pages, to make them a bit easier to use. So, I just imported the os >>>>>>> module, can execute the script. This is all internal stuff, nothing that >>>>>>> has to be production hardened or such. This lets the guys writing the >>>>>>> python scripts for console do their thing, and lets me provide another >>>>>>> avenue for execution. >>>>>>> >>>>>>> I plan to swing back around on this one, and do more work, but using >>>>>>> os module for now works. I did notice one odd thing, a couple of our >>>>>>> python classes/functions that work great from console, break when I import >>>>>>> them to a CherryPy script, and then execute as you note. One error is that >>>>>>> bit shifting with the '<<' operator gripes about how it is used. Only get >>>>>>> that error, when the given function/routine is imported to CherryPy >>>>>>> environment. From console (python 2), no error at all. >>>>>>> >>>>>>> >>>>>>> On Saturday, April 28, 2018 at 1:04:56 PM UTC-7, [email protected] >>>>>>> wrote: >>>>>>>> >>>>>>>> Have existing python script file that I want to execute from within >>>>>>>> a cherrypy web site/page. How can this be done 100% native to cherrypy? >>>>>>>> Many examples reference java or CGI mods, that is not acceptable nor should >>>>>>>> it be IMHO. There has to be a 100% cherrypi method to do this, no? >>>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "cherrypy-users" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to cherrypy-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] >>>>>>> To post to this group, send email to cherrypy-users-/[email protected] >>>>>>> . >>>>>>> Visit this group at https://groups.google.com/group/cherrypy-users. >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "cherrypy-users" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to cherrypy-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] >>>>>> To post to this group, send email to cherrypy-users-/[email protected]. >>>>>> Visit this group at https://groups.google.com/group/cherrypy-users. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Kind regards, >>>>> >>>>> Sviatoslav Sydorenko >>>>> email: [email protected] >>>>> cell #: +380978963757 >>>>> >>>>> >>>>> >>>> >>> >> >> >> -- >> Kind regards, >> >> Sviatoslav Sydorenko >> email: [email protected] >> cell #: +380978963757 >> -- >> You received this message because you are subscribed to the Google Groups >> "cherrypy-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to cherrypy-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] >> To post to this group, send email to cherrypy-users-/JYPxA39Uh5TLH3MbocFF+G/[email protected] >> Visit this group at https://groups.google.com/group/cherrypy-users. >> For more options, visit https://groups.google.com/d/optout. >> >> >> > > > -- > Kind regards, > > Sviatoslav Sydorenko > email: [email protected] > cell #: +380978963757 > -- > You received this message because you are subscribed to the Google Groups > "cherrypy-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to cherrypy-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] > To post to this group, send email to cherrypy-users-/JYPxA39Uh5TLH3MbocFF+G/[email protected] > Visit this group at https://groups.google.com/group/cherrypy-users. > For more options, visit https://groups.google.com/d/optout. > > > -- Kind regards, Sviatoslav Sydorenko email: [email protected] cell #: +380978963757 -- You received this message because you are subscribed to the Google Groups "cherrypy-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to cherrypy-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] To post to this group, send email to cherrypy-users-/JYPxA39Uh5TLH3MbocFF+G/[email protected] Visit this group at https://groups.google.com/group/cherrypy-users. For more options, visit https://groups.google.com/d/optout.