How to execute commands in internal zones of solaris using python running from the global zone ?
news1234 at free.fr
Wed Aug 13 23:22:31 CEST 2008
> Hishaam wrote:
>> How to execute commands in internal zones of solaris using python
>> running from the global zone ?
>> i tried --
>> 1> os.popen("zlogin <zone1>")
>> 2> os.popen("zonename")
>> the 2nd command executes back into the global zone and not into the
>> internal zone
>> can anyone help?
Hmm, I was't reading enough.
popen2 can be imported with popen2
the more modern alternative to popen seems to be subprocess.Popen
And here a short example:
# default host / command
# host / command via command line
# didn't have time to check whether
# shifting sys.argv is a common practice
if(len(sys.argv) > 1):
if(len(sys.argv) > 2):
# ============== solution 1 ============
# just passing command to command line of ssh / rsh / zlogin
pipe_in = os.popen('ssh ' + host + ' ' + command)
a = pipe_in.read()
print 'Result of solution 1',a
# a minor variation of solution 1 would be the next line
# in ssh the switch -T disables tty allocation and gets rid of a warning'
#pipe_in = os.popen('echo '+command+' | ssh -T' + host)
# =========== solution 2 =================
# using popen2
# if you do a little more than one command this might
# be prone to dead locks
# for more complex cases it's probably better
# to use one thread for sending the commands and one thread for
# collecting the responses
# if you want to see the warning remove it ;-_
[ z1_stdout , z1_stdin ] = popen2.popen2('ssh -T '+host)
z1_stdin.write(command + '\n')
a = z1_stdout.read()
print "Result of solution 2 is: ",a
> Very probably you didn't want to start two pipes (two processes on your
> Can you ssh or rsh to zone 1?
> Then you want probably something like:
> os.popen('echo zonename | ssh <zone1>')
> If not you could look at pexpect, though I didn't use it myself so far.
> just look at the thread 'SSH utility' to get some examples.
> you just had to replace 'ssh' with 'zlogin'
> ( http://www.noah.org/wiki/Pexpect )
> Or you could try popen2, http://docs.python.org/lib/module-popen2.html
> Strange thing is though, that popen doesn't seem to exist on my python.
> Perhaps it's not a standard library.
> No idea. I myself am rather new to python :-(
> However if you want to try popen2 read also 17.4.2 'Flow Control Issues'
> in order to be sure, that your program doesn't deadlock
> [ z1_stdin , z1_stdout ] = os.popen2('ssh <zone1')
> bye N
More information about the Python-list