RE: [Zope] Calling External Method...
EEK! You're right! OK, that's fixed for now, but I thought I saw in this mailing list that an external method was required to have a docstring. What role does the docstring play, exactly? My ultimate goal is to be able to run the C++ program from Zope, returning the results to a Zope generated web page. In your opinion, what's the best way to do that?
I think the way you're doing it is fine unless you expect it to be hit a lot or it becomes too slow. If you leave the docstring off the external method, you can still call it from DTML, but you can't call it from the web. This only really helps if nobody else has access to write DTML on your site. It's probably most wise to just make an external method called websim that just runs that specific executable instead of running an arbitrary executable chosen by the DTML programmer, in case someone can somehow add DTML to your site, or in case someone finds a hole.
// // > /usr/local/Zope/lib/python/Products/ExternalMethod/ExternalMethod.py, // > line 248, in __call__ // > (Object: ExecCGI) // > (Info: (('./websim',), {}, None)) // > File /usr/local/Zope/Extensions/ExecCGI.py, line 11, in xCGI // > TypeError: (see above) // // I *think* this error message is telling you that it can't format the // status code as an integer in your raise statement. Why don't you take // out your status checking code and see what happens. I tried taking out the status code stuff and it didn't help.
Am I on the right track with this? Shouldn't it be easy (& secure) to launch a C app on the server and pipe the results back to Zope? If so, how. The approach I took (above) was recomended by someone else on the list.
I think you should probably make sure the function works from Python (unless you already have). Use an absolute path to the executable, as your cwd may change inside of Zope. Then when you're able to import the Python module that makes up the external method module and execute the function successfully, make it an external method within Zope.
// > Am I on the right track with this? Shouldn't it be easy (& secure) to // > launch a C app on the server and pipe the results back to // > Zope? If so, how. // > The approach I took (above) was recommended by someone else on // > the list. // // I think you should probably make sure the function works from Python // (unless you already have). Use an absolute path to the executable, as // your cwd may change inside of Zope. Then when you're able to import the // Python module that makes up the external method module and execute the // function successfully, make it an external method within Zope. That's the frustrating thing, it *is* working from the Python command line but it is outputting an entire web page, shich may be a problem(?). I will compile something that spits out extremely simple output, follow your directions regarding the absolute path and hard code in the name of the executable for security sake, then plug that into Zope with an external method. Thanks for your help, Chris! Eric.
participants (2)
-
Chris McDonough -
Eric L. Walstad