[Zope-dev] Extrenal method unable to run the os.popen() or os.system() commands

Ridzwan Aminuddin wanster at inbox.com
Tue Feb 13 20:31:23 EST 2007


Hi!

Thanks for your reply.

I heeded your advice and tried fooling around with the stderr. Apparently even if i set the classpath through my execution statement i.e :

   command = "java -jar -classpath "/var/lib/zope2.8/instance/plone-site/Extensions/ test.jar"
   os.system(command)

it doesn't seem to work. Because even though i have denoted the path to the jar file, this python external method requires me to be in the atual working directory in order o sucessfully run this command.

What i tried was to write a shell script instead

   #!/bin/bash
   # My shell script
   path='/var/lib/zope2.8/instance/plone-site/Extensions'
   cd $path
   java -jar test.jar


this shell script is executed by my external method :

   command = "home/ewan/myScript"
   os.system(command)

This works perfectly. So now i know it has to do with the physical working directory i am in. Simply setting the classpath doesn't work or giving the absolute path to the jar file doesn't work either.

i.e : 

   command = "java -jar /var/lib/zope2.8/instance/plone-site/Extensions/test.jar"
   os.system(command)

Anyone knows why this is so? and is there any way around this? I find it inefficient that i have my DTML calling My Python calling a Shell Script that runs an executable. Such a long chain! 

In any case, thanks for you guys' help!

cheers dudes

wan

> -----Original Message-----
> From: dieter at handshake.de
> Sent: Tue, 13 Feb 2007 21:45:38 +0100
> To: wanster at inbox.com
> Subject: Re: [Zope-dev] Extrenal method unable to run the os.popen() or
> os.system() commands
> 
> Ridzwan Aminuddin wrote at 2007-2-12 19:41 -0800:
>> ...
> >This external method is triggered in my DTML code. I've created other
> external methods
> >before so i know i've done it right.. but the os.system() command for
> java -jar just
> >doesn't seem to work. I've tried to use other commands such as "ls"
> which works perfectly:
>> 
> >	command = "ls"
> >	whatisread = os.popen(command).read()
> >	print whatisread
> 
> Thus, you have found out that the problem is not with "ExternalMethod"
> or "popen" in principle but with "java" calls done this way.
> 
> I would expect that "java" cannot be executed (maybe, because the
> "PATH" variable is different when run from Zope and "java" is not
> on this "PATH") or that "java" is executed but dislikes something
> in the environment.
> 
> In both cases, I would expect some problem message on "stderr".
> 
> Thus, I (in your place) would check how I could capture the "stderr" of
> the "popen" process and carefully look at it.
> 
> One possibility would be to redirect "stderr" in the "popen" command
> itself ("... >> /tmp/java.stderr").
> 
> 
> In principle, it is possible to start "java" from an "ExternalMethod"
> with "os.system" and friends.
> We do this all the time.
> 
> 
> 
> --
> Dieter


More information about the Zope-Dev mailing list