diff options
author | Narayan Desai <desai@mcs.anl.gov> | 2005-10-24 21:22:15 +0000 |
---|---|---|
committer | Narayan Desai <desai@mcs.anl.gov> | 2005-10-24 21:22:15 +0000 |
commit | 07a028a8487fb9fdd4b57db0275ce76bfa879c03 (patch) | |
tree | 521125b765c75c21d0735cc92d5896fc78bcd0f0 /src | |
parent | 6ff36754bc83eb19bbbbd503a05d7b9f9af32f72 (diff) | |
download | bcfg2-07a028a8487fb9fdd4b57db0275ce76bfa879c03.tar.gz bcfg2-07a028a8487fb9fdd4b57db0275ce76bfa879c03.tar.bz2 bcfg2-07a028a8487fb9fdd4b57db0275ce76bfa879c03.zip |
ditto
2005/10/24 04:44:04-05:00 anl.gov!desai
make saferun a little more friendly
2005/10/24 04:38:02-05:00 anl.gov!desai
add saferun and fix some pylint errors
(Logical change 1.343)
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@1415 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/Client/Toolset.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/lib/Client/Toolset.py b/src/lib/Client/Toolset.py index 804756e2b..e19293f7d 100644 --- a/src/lib/Client/Toolset.py +++ b/src/lib/Client/Toolset.py @@ -8,11 +8,12 @@ from os import chown, chmod, lstat, mkdir, stat, system, unlink, rename, readlin from pwd import getpwuid, getpwnam from stat import S_ISVTX, S_ISGID, S_ISUID, S_IXUSR, S_IWUSR, S_IRUSR, S_IXGRP from stat import S_IWGRP, S_IRGRP, S_IXOTH, S_IWOTH, S_IROTH, ST_MODE, S_ISDIR -from stat import S_IFREG, ST_UID, ST_GID, S_ISREG, S_IFDIR, S_ISLNK, S_ISCHR, S_ISBLK +from stat import S_IFREG, ST_UID, ST_GID, S_ISREG, S_IFDIR, S_ISLNK from sys import exc_info import stat as statmod #from time import asctime, localtime from traceback import extract_tb +from popen2 import Popen4 from elementtree.ElementTree import Element, SubElement, tostring @@ -30,6 +31,16 @@ def calc_perms(initial, perms): tempperms |= perm return tempperms +def saferun(command): + '''Run a command in a pipe dealing with stdout buffer overloads''' + runpipe = Popen4(command, bufsize=16384) + output = runpipe.fromchild.read() + cmdstat = runpipe.poll() + while cmdstat == -1: + output += runpipe.fromchild.read() + cmdstat = runpipe.poll() + return (cmdstat, [line for line in output.split('\n') if line]) + class Toolset(object): '''The toolset class contains underlying command support and all states''' __important__ = [] |