aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormwilli2@equilibrium.research <mwilli2@equilibrium.research>2004-11-03 17:16:34 +0000
committermwilli2@equilibrium.research <mwilli2@equilibrium.research>2004-11-03 17:16:34 +0000
commiteb0ec2d2c0f7bee3e98837ff774a99387700d791 (patch)
tree00bde4cddb646728f2198bf20cd148ff4ae6c1ad
parent5e61697dfd4acfe06b5c2a03b62fdaa3451156ea (diff)
parent6ab8abb18dcc34cd1d3539efd95cf7af743f8306 (diff)
downloadxen-eb0ec2d2c0f7bee3e98837ff774a99387700d791.tar.gz
xen-eb0ec2d2c0f7bee3e98837ff774a99387700d791.tar.bz2
xen-eb0ec2d2c0f7bee3e98837ff774a99387700d791.zip
bitkeeper revision 1.1159.1.354 (41891272X8MfKdN725aWtH970ayx1Q)
Merge ssh://srg//auto/groups/xeno/BK/xeno.bk into equilibrium.research:/export/scratch/xeno-docs.bk
-rw-r--r--.rootkeys1
-rw-r--r--tools/python/xen/sv/Daemon.py5
-rw-r--r--tools/python/xen/util/Brctl.py6
-rw-r--r--tools/python/xen/util/ip.py8
-rw-r--r--tools/python/xen/xend/Blkctl.py3
-rw-r--r--tools/python/xen/xend/server/SrvDaemon.py5
-rwxr-xr-xtools/python/xen/xend/server/blkif.py3
-rw-r--r--tools/python/xen/xend/util.py36
8 files changed, 56 insertions, 11 deletions
diff --git a/.rootkeys b/.rootkeys
index acc4fb6c0d..4896a7d5e2 100644
--- a/.rootkeys
+++ b/.rootkeys
@@ -491,6 +491,7 @@
40c9c46925x-Rjb0Cv2f1-l2jZrPYg tools/python/xen/xend/server/netif.py
40c9c469ZqILEQ8x6yWy0_51jopiCg tools/python/xen/xend/server/params.py
40c9c469LNxLVizOUpOjEaTKKCm8Aw tools/python/xen/xend/sxp.py
+4189125cL90jKSOcBJ3Vx4nWGiXXvA tools/python/xen/xend/util.py
40d05079aFRp6NQdo5wIh5Ly31c0cg tools/python/xen/xm/__init__.py
40cf2937gKQcATgXKGtNeWb1PDH5nA tools/python/xen/xm/create.py
40f552eariuUSB9TWqCPnDLz5zvxMw tools/python/xen/xm/destroy.py
diff --git a/tools/python/xen/sv/Daemon.py b/tools/python/xen/sv/Daemon.py
index 510cfa9f04..8aeb58720e 100644
--- a/tools/python/xen/sv/Daemon.py
+++ b/tools/python/xen/sv/Daemon.py
@@ -11,6 +11,7 @@ import sys
import re
from xen.sv.params import *
+from xen.xend import util
from twisted.internet import reactor
from twisted.web import static, server, script
@@ -29,7 +30,7 @@ class Daemon:
cmdex = '(?P<cmd>.*)'
procre = re.compile('^\s*' + pidex + '\s*' + pythonex + '\s*' + cmdex + '$')
xendre = re.compile('^/usr/sbin/xend\s*(start|restart)\s*.*$')
- procs = os.popen('ps -e -o pid,args 2>/dev/null')
+ procs = util.popen('ps -e -o pid,args 2>/dev/null')
for proc in procs:
pm = procre.match(proc)
if not pm: continue
@@ -57,7 +58,7 @@ class Daemon:
return 0
# Read the pid of the previous invocation and search active process list.
pid = open(PID_FILE, 'r').read()
- lines = os.popen('ps ' + pid + ' 2>/dev/null').readlines()
+ lines = util.popen('ps ' + pid + ' 2>/dev/null').readlines()
for line in lines:
if re.search('^ *' + pid + '.+xensv', line):
if not kill:
diff --git a/tools/python/xen/util/Brctl.py b/tools/python/xen/util/Brctl.py
index 7a6f4871df..569d1b3357 100644
--- a/tools/python/xen/util/Brctl.py
+++ b/tools/python/xen/util/Brctl.py
@@ -5,6 +5,8 @@ import os.path
import re
import sys
+from xen.xend import util
+
os.defpath = os.defpath + ':/sbin:/usr/sbin:/usr/local/sbin'
CMD_IFCONFIG = 'ifconfig'
CMD_ROUTE = 'route'
@@ -81,7 +83,7 @@ def bridge_del(bridge):
def routes():
"""Return a list of the routes.
"""
- fin = os.popen(CMD_ROUTE + ' -n', 'r')
+ fin = util.popen(CMD_ROUTE + ' -n', 'r')
routes = []
for x in fin:
if x.startswith('Kernel'): continue
@@ -102,7 +104,7 @@ def routes():
def ifconfig(interface):
"""Return the ip config for an interface,
"""
- fin = os.popen(CMD_IFCONFIG + ' %s' % interface, 'r')
+ fin = util.popen(CMD_IFCONFIG + ' %s' % interface, 'r')
inetre = re.compile('\s*inet\s*addr:(?P<address>\S*)\s*Bcast:(?P<broadcast>\S*)\s*Mask:(?P<mask>\S*)')
info = None
for x in fin:
diff --git a/tools/python/xen/util/ip.py b/tools/python/xen/util/ip.py
index 9dd558a178..d130f19421 100644
--- a/tools/python/xen/util/ip.py
+++ b/tools/python/xen/util/ip.py
@@ -4,6 +4,8 @@ import socket
import struct
import errno
+from xen.xend import util
+
def _readlines(fd):
"""Version of readlines safe against EINTR.
"""
@@ -49,7 +51,7 @@ def get_current_ipaddr(dev='eth0'):
returns interface address as a string
"""
- fd = os.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
+ fd = util.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
lines = _readlines(fd)
for line in lines:
m = re.search( '^\s+inet addr:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',
@@ -67,7 +69,7 @@ def get_current_ipmask(dev='eth0'):
returns interface netmask as a string
"""
- fd = os.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
+ fd = util.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
lines = _readlines(fd)
for line in lines:
m = re.search( '^.+Mask:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',
@@ -85,7 +87,7 @@ def get_current_ipgw(dev='eth0'):
returns gateway address as a string
"""
- fd = os.popen( '/sbin/route -n' )
+ fd = util.popen( '/sbin/route -n' )
lines = _readlines(fd)
for line in lines:
m = re.search( '^\S+\s+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)' +
diff --git a/tools/python/xen/xend/Blkctl.py b/tools/python/xen/xend/Blkctl.py
index a5bda19470..f912a42473 100644
--- a/tools/python/xen/xend/Blkctl.py
+++ b/tools/python/xen/xend/Blkctl.py
@@ -5,6 +5,7 @@ import os.path
import sys
import string
+from xen.xend import util
from xen.xend import XendRoot
xroot = XendRoot.instance()
@@ -35,7 +36,7 @@ def block(op, type, dets, script=None):
script = os.path.join(SCRIPT_DIR, script)
args = [op] + string.split(dets, ':')
args = ' '.join(args)
- out = os.popen(script + ' ' + args)
+ out = util.popen(script + ' ' + args)
output = out.readline()
out.close()
diff --git a/tools/python/xen/xend/server/SrvDaemon.py b/tools/python/xen/xend/server/SrvDaemon.py
index cc7da8ee43..ea813965ce 100644
--- a/tools/python/xen/xend/server/SrvDaemon.py
+++ b/tools/python/xen/xend/server/SrvDaemon.py
@@ -34,6 +34,7 @@ from xen.xend.XendError import XendError
from xen.xend.server import SrvServer
from xen.xend import XendRoot
from xen.xend.XendLogging import log
+from xen.xend import util
import channel
import blkif
@@ -336,7 +337,7 @@ class Daemon:
cmdex = '(?P<cmd>.*)'
procre = re.compile('^\s*' + pidex + '\s*' + pythonex + '\s*' + cmdex + '$')
xendre = re.compile('^/usr/sbin/xend\s*(start|restart)\s*.*$')
- procs = os.popen('ps -e -o pid,args 2>/dev/null')
+ procs = util.popen('ps -e -o pid,args 2>/dev/null')
for proc in procs:
pm = procre.match(proc)
if not pm: continue
@@ -382,7 +383,7 @@ class Daemon:
"""
running = 0
if pid:
- lines = os.popen('ps %d 2>/dev/null' % pid).readlines()
+ lines = util.popen('ps %d 2>/dev/null' % pid).readlines()
exp = '^ *%d.+%s' % (pid, name)
for line in lines:
if re.search(exp, line):
diff --git a/tools/python/xen/xend/server/blkif.py b/tools/python/xen/xend/server/blkif.py
index 9ca8eab5fe..df32613470 100755
--- a/tools/python/xen/xend/server/blkif.py
+++ b/tools/python/xen/xend/server/blkif.py
@@ -8,6 +8,7 @@ from xen.xend import sxp
from xen.xend import Blkctl
from xen.xend.XendLogging import log
from xen.xend.XendError import XendError, VmError
+from xen.xend import util
import os
import re
@@ -25,7 +26,7 @@ def expand_dev_name(name):
def check_mounted(self, name):
mode = None
name = expand_dev_name(name)
- lines = os.popen('mount 2>/dev/null').readlines()
+ lines = util.popen('mount 2>/dev/null').readlines()
exp = re.compile('^' + name + ' .*[\(,]r(?P<mode>[ow])[,\)]')
for line in lines:
pm = exp.match(line)
diff --git a/tools/python/xen/xend/util.py b/tools/python/xen/xend/util.py
new file mode 100644
index 0000000000..111d8cd011
--- /dev/null
+++ b/tools/python/xen/xend/util.py
@@ -0,0 +1,36 @@
+# Misc utility functions for Xend
+# (c) 2004 Mark A. Williamson <mark.williamson@cl.cam.ac.uk>
+
+from twisted.internet import utils
+from twisted.internet import reactor
+from XendLogging import log
+from StringIO import StringIO
+
+# This is rather distasteful. Twisted doesn't play nicely with Python's
+# standard os.popen, so here's an implementation of a synchronous popen that
+# should work reliably. - MAW
+def popen(cmd):
+ global done_flag, result
+
+ done_flag = False
+ result = ''
+
+ def done(output):
+ global done_flag, result
+ done_flag = True
+ result = output
+
+ def err(output):
+ global done_flag
+# For normal use, suppress debug output here. It grumbles about stderr if the
+# program exits with $? != 0, even if stderr is redirected. Grrr!
+# log.debug("util.popen(\'%s\'): %s" % (cmd, output))
+ done_flag = True
+
+ d = utils.getProcessOutput(cmd)
+ d.addCallbacks(done, err)
+
+ while not done_flag:
+ reactor.iterate()
+
+ return StringIO(result)