bitkeeper revision 1.1159.1.358 (418978baFzv03HdTaa43BJsoKTl3dA)

Better fix for popen.  Also makes it easier to log stderr output
from popen'd commands, which we previously threw away.  For now,
I'm also throwing it away.
This commit is contained in:
mwilli2@equilibrium.research committed 2004-11-04 00:32:58 +00:00
1 parent b64644981d
commit 3f96a09036
5 files changed
+31 -20

No files matched your search

+2 -2
View File
@@ -30,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 = util.popen('ps -e -o pid,args 2>/dev/null')
procs = util.popen('ps -e -o pid,args')
for proc in procs:
pm = procre.match(proc)
if not pm: continue
@@ -58,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 = util.popen('ps ' + pid + ' 2>/dev/null').readlines()
lines = util.popen('ps ' + pid).readlines()
for line in lines:
if re.search('^ *' + pid + '.+xensv', line):
if not kill:
+2 -2
View File
@@ -51,7 +51,7 @@ def get_current_ipaddr(dev='eth0'):
returns interface address as a string
"""
fd = util.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
fd = util.popen( '/sbin/ifconfig ' + dev )
lines = _readlines(fd)
for line in lines:
m = re.search( '^\s+inet addr:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',
@@ -69,7 +69,7 @@ def get_current_ipmask(dev='eth0'):
returns interface netmask as a string
"""
fd = util.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
fd = util.popen( '/sbin/ifconfig ' + dev )
lines = _readlines(fd)
for line in lines:
m = re.search( '^.+Mask:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',
+2 -2
View File
@@ -337,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 = util.popen('ps -e -o pid,args 2>/dev/null')
procs = util.popen('ps -e -o pid,args')
for proc in procs:
pm = procre.match(proc)
if not pm: continue
@@ -383,7 +383,7 @@ class Daemon:
"""
running = 0
if pid:
lines = util.popen('ps %d 2>/dev/null' % pid).readlines()
lines = util.popen('ps %d' % pid).readlines()
exp = '^ *%d.+%s' % (pid, name)
for line in lines:
if re.search(exp, line):
+1 -1
View File
@@ -26,7 +26,7 @@ def expand_dev_name(name):
def check_mounted(self, name):
mode = None
name = expand_dev_name(name)
lines = util.popen('mount 2>/dev/null').readlines()
lines = util.popen('mount').readlines()
exp = re.compile('^' + name + ' .*[\(,]r(?P<mode>[ow])[,\)]')
for line in lines:
pm = exp.match(line)
+24 -13
View File
@@ -3,9 +3,12 @@
from twisted.internet import utils
from twisted.internet import reactor
from twisted.internet import protocol
from XendLogging import log
from StringIO import StringIO
import os
# 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
@@ -14,22 +17,30 @@ def popen(cmd):
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
class PopenProtocol(protocol.ProcessProtocol):
def connectionMade(self):
self.transport.closeStdin() # we don't want stdin
def outReceived(self, data):
global result
result = result + data
# def errReceived(self, errdata):
# log.debug("popen: %s" % errdata)
def processEnded(self,status_obj):
code = status_obj.value.exitCode
if code:
# todo: Should consider throwing an exception here.
log.debug("popen: process exit with code %d" % code)
global done_flag
done_flag = True
d = utils.getProcessOutput(cmd)
d.addCallbacks(done, err)
# using cmd.split is quick and dirty. OK as long as people don't try anything
# tricky with quotes, etc.
args = cmd.split(' ')
reactor.spawnProcess(PopenProtocol(), args[0], args, os.environ)
# Ick! Sit and ask the reactor to do IO, until the process finishes.
# Can't just do "pass" here because then the reactor won't run at all :-(
while not done_flag:
reactor.iterate()
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.