On 12/18/2013 02:31 PM, Royce Lv
wrote:
On 2013年12月17日 20:50, Ramon Medeiros wrote:
On 12/17/2013 10:10 AM, lvroyce0210@gmail.com
wrote:
From: Royce Lv <lvroyce@linux.vnet.ibm.com>
Abstract a helper function to parse cmd result.
Usage:
(1)get cmd result with subprocess.call or subprocess.Popen
(2) call pass_cmd_output to get formated outputs
Example:
blkid = subprocess.Popen(["cat", "/proc/mounts"],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
outs = blkid.communicate()[0]
output_items= ['path', 'mnt_point', 'type', 'option']
utils.pass_cmd_output(outs, output_items)
Sample output:
[{'path': '/dev/sda8', 'type': 'ext4',
'option': 'rw,relatime,data=ordered', 'mnt_point':
'/home'},
{'path': 'localhost:/home/royce/isorepo', 'type': 'nfs4',
'option': 'rw...addr=127.0.0.1', 'mnt_point': '/mnt'}]
Signed-off-by: Royce Lv <lvroyce@linux.vnet.ibm.com>
---
src/kimchi/utils.py | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/kimchi/utils.py b/src/kimchi/utils.py
index f7eda93..1890a28 100644
--- a/src/kimchi/utils.py
+++ b/src/kimchi/utils.py
@@ -84,3 +84,10 @@ def import_class(class_path):
def import_module(module_name):
return __import__(module_name, fromlist=[''])
+
+def parse_cmd_output(output, output_items):
+ res = []
+ for line in output.split("\n"):
can you get the Popen result and use readlines, to get a
array with the lines, instead of striping it?
Hi Ramon,
Thanks for your review, I think for file read result it is OK,
but seems for popen.communicate just pull out the raw output ,
and only stdout provide readlines interface, which official
doc does not recommend because of deadlock problem. (http://docs.python.org/3.3/library/subprocess.html#subprocess.Popen.communicate).
I think Ramon want:
+ with open("/proc/mounts" , "rb") as f:
+ res = []
+ for output in f.readlines():
+ res.append(dict(zip(['dev_path', 'mnt_point', 'type'], output.split()))
+ return res