Re: [Kimchi-devel] [project-kimchi][PATCH 1/3] utils: Add a helper function to parse cmd result

On 2013年12月17日 20:50, Ramon Medeiros 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
On 12/17/2013 10:10 AM, lvroyce0210@gmail.com wrote: 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.communic...).
+ res.append(dict(zip(output_items, line.split()))) + + return res
-- project-kimchi mailing list <project-kimchi@googlegroups.com> https://groups.google.com/forum/#!forum/project-kimchi --- You received this message because you are subscribed to the Google Groups "project-kimchi" group. To unsubscribe from this group and stop receiving emails from it, send an email to project-kimchi+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.

Reviewed-by: ShaoHe Feng <shaohef@linux.vnet.ibm.com> On 12/18/2013 02:31 PM, Royce Lv wrote:
On 2013年12月17日 20:50, Ramon Medeiros 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
On 12/17/2013 10:10 AM, lvroyce0210@gmail.com wrote: 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.communic...). 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 maybe you want a common function to parse both the output from stdout and files. blkid = subprocess.Popen(["cat", "/proc/mounts"],
+ res.append(dict(zip(output_items, line.split()))) + + return res
Sheldon Feng(冯少合) IBM Linux Technology Center -- project-kimchi mailing list <project-kimchi@googlegroups.com> https://groups.google.com/forum/#!forum/project-kimchi --- You received this message because you are subscribed to the Google Groups "project-kimchi" group. To unsubscribe from this group and stop receiving emails from it, send an email to project-kimchi+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.

On 12/18/2013 02:40 PM, Sheldon wrote: > Reviewed-by: ShaoHe Feng <shaohef@linux.vnet.ibm.com> sorry, this Reviewed-by is added automatically by my thunderbird plugin. > 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 > > maybe you want a common function to parse both the output from stdout > and files. > > blkid = subprocess.Popen(["cat", "/proc/mounts"], >> >>>> + res.append(dict(zip(output_items, line.split()))) >>>> + >>>> + return res >>> >>> >> > > > Sheldon Feng(冯少合) > IBM Linux Technology Center > -- > project-kimchi mailing list <project-kimchi@googlegroups.com> > https://groups.google.com/forum/#!forum/project-kimchi > <https://groups.google.com/forum/#%21forum/project-kimchi> > --- > You received this message because you are subscribed to the Google > Groups "project-kimchi" group. > To unsubscribe from this group and stop receiving emails from it, send > an email to project-kimchi+unsubscribe@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. Sheldon Feng(冯少合) IBM Linux Technology Center -- project-kimchi mailing list <project-kimchi@googlegroups.com> https://groups.google.com/forum/#!forum/project-kimchi --- You received this message because you are subscribed to the Google Groups "project-kimchi" group. To unsubscribe from this group and stop receiving emails from it, send an email to project-kimchi+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.

On 2013年12月18日 14:40, Sheldon wrote: > Reviewed-by: ShaoHe Feng <shaohef@linux.vnet.ibm.com> > 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 > > maybe you want a common function to parse both the output from stdout > and files. > > blkid = subprocess.Popen(["cat", "/proc/mounts"], True, I want a helper function that all command can use to get a structural result. So that in the future if we want to get iscsi session, or other things , we can reuse this function. >> >>>> + res.append(dict(zip(output_items, line.split()))) >>>> + >>>> + return res >>> >>> >> > > > Sheldon Feng(冯少合) > IBM Linux Technology Center > -- > project-kimchi mailing list <project-kimchi@googlegroups.com> > https://groups.google.com/forum/#!forum/project-kimchi > <https://groups.google.com/forum/#%21forum/project-kimchi> > --- > You received this message because you are subscribed to the Google > Groups "project-kimchi" group. > To unsubscribe from this group and stop receiving emails from it, send > an email to project-kimchi+unsubscribe@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. -- project-kimchi mailing list <project-kimchi@googlegroups.com> https://groups.google.com/forum/#!forum/project-kimchi --- You received this message because you are subscribed to the Google Groups "project-kimchi" group. To unsubscribe from this group and stop receiving emails from it, send an email to project-kimchi+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.

On 12/18/2013 05:12 AM, Royce Lv wrote: > On 2013年12月18日 14:40, Sheldon wrote: >> Reviewed-by: ShaoHe Feng <shaohef@linux.vnet.ibm.com> >> 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 yes, this was my wish! >> maybe you want a common function to parse both the output from stdout >> and files. >> >> blkid = subprocess.Popen(["cat", "/proc/mounts"], > True, I want a helper function that all command can use to get a > structural result. > So that in the future if we want to get iscsi session, or other things > , we can reuse this function. ok >>> >>>>> + res.append(dict(zip(output_items, line.split()))) >>>>> + >>>>> + return res >>>> >>>> >>> >> >> >> Sheldon Feng(冯少合) >> IBM Linux Technology Center >> -- >> project-kimchi mailing list <project-kimchi@googlegroups.com> >> https://groups.google.com/forum/#!forum/project-kimchi >> <https://groups.google.com/forum/#%21forum/project-kimchi> >> --- >> You received this message because you are subscribed to the Google >> Groups "project-kimchi" group. >> To unsubscribe from this group and stop receiving emails from it, >> send an email to project-kimchi+unsubscribe@googlegroups.com. >> For more options, visit https://groups.google.com/groups/opt_out. > > -- > project-kimchi mailing list <project-kimchi@googlegroups.com> > https://groups.google.com/forum/#!forum/project-kimchi > <https://groups.google.com/forum/#%21forum/project-kimchi> > --- > You received this message because you are subscribed to the Google > Groups "project-kimchi" group. > To unsubscribe from this group and stop receiving emails from it, send > an email to project-kimchi+unsubscribe@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. -- Ramon Nunes Medeiros Software Engineer - Linux Technology Center Brazil IBM Systems & Technology Group Phone : +55 19 2132 7878 ramonn@br.ibm.com -- project-kimchi mailing list <project-kimchi@googlegroups.com> https://groups.google.com/forum/#!forum/project-kimchi --- You received this message because you are subscribed to the Google Groups "project-kimchi" group. To unsubscribe from this group and stop receiving emails from it, send an email to project-kimchi+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
participants (3)
-
Ramon Medeiros
-
Royce Lv
-
Sheldon