Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
On Mon, Nov 12, 2018 at 11:20 PM Anssi Saari wrote: > > Chris Angelico writes: > > > On Fri, Nov 9, 2018 at 11:11 PM Anssi Saari wrote: > >> > >> Chris Angelico writes: > >> > >> > No helper needed. Safe against command injection. Uses the known > >> > format of the command's output; if you want other information as well > >> > as the type, you could get that too. > >> > >> Can someone let me in on this secret helper module? Doesn't seem to > >> match the helper module in PyPI at least. > >> > > > > What helper? > > Helper module used in the original post. I assumed you know what it is > since you declared it's not needed. Oh! I see what you mean. I wasn't referring to an entire module, just a helper *function*. Look at the OP's code at this function: def execute_cmd_output_string(self, cmd, enable_shell=False): This is a function whose sole purpose is to make it easier to write other functions. That's what's often referred to as a "helper function". (It's also dangerously written, as it turns other failures into AssertionError.) By simplifying the code and removing the need for this helper, we can make it more consistent with the rest of the Python ecosystem, less buggy [1], and probably easier to read. ChrisA [1] It's generally true that a programmer's bugs-per-lines-of-code metric is fairly stable, so having less code usually means less bugs. Not certain by any means, but consider: non-code cannot have bugs in it, and code usually does. It's a good rule of thumb. -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
Chris Angelico writes: > On Fri, Nov 9, 2018 at 11:11 PM Anssi Saari wrote: >> >> Chris Angelico writes: >> >> > No helper needed. Safe against command injection. Uses the known >> > format of the command's output; if you want other information as well >> > as the type, you could get that too. >> >> Can someone let me in on this secret helper module? Doesn't seem to >> match the helper module in PyPI at least. >> > > What helper? Helper module used in the original post. I assumed you know what it is since you declared it's not needed. > I said you don't need one. Just use subprocess directly. This part was clear. -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
srinivasan wrote: > Even after changing as per the below > "blkid -o export %s | grep 'TYPE' | cut -d'=' -f3" > or: > 'blkid -o export %s | grep "TYPE" | cut -d"=" -f3' > or: > "blkid -o export %s | grep \"TYPE\" | cut -d\"=\" -f3" > > Still my output is: > */dev/mmcblk1p1: LABEL="efi" UUID="1084-AA42" TYPE="vfat"* > > My expected output should be only: > *vfat* > > Could you guys please do the needful? I tried a simiar command line from a rock64 sbc shell and found that -f2 instead of -f3 returned only vfat -- Stanley C. Kitching Human Being Phoenix, Arizona -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
On Fri, Nov 9, 2018 at 11:11 PM Anssi Saari wrote: > > Chris Angelico writes: > > > No helper needed. Safe against command injection. Uses the known > > format of the command's output; if you want other information as well > > as the type, you could get that too. > > Can someone let me in on this secret helper module? Doesn't seem to > match the helper module in PyPI at least. > What helper? I said you don't need one. Just use subprocess directly. ChrisA -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
Chris Angelico writes: > No helper needed. Safe against command injection. Uses the known > format of the command's output; if you want other information as well > as the type, you could get that too. Can someone let me in on this secret helper module? Doesn't seem to match the helper module in PyPI at least. -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
Many Thanks a lot , I can use for reliably "lsblk %s -n -o FSTYPE" in the reused code of mine as below cmd = "lsblk %s -n -o FSTYPE" % partition_path return self._helper.execute_cmd_output_string(cmd) I really appreciate for all your support w.r.t this.. I feel I have kick started my learning in python :) Have a great day ahead! On Wed, Nov 7, 2018 at 3:11 PM Ben Bacarisse wrote: > srinivasan writes: > > > Even after changing as per the below > > "blkid -o export %s | grep 'TYPE' | cut -d'=' -f3" > > or: > > 'blkid -o export %s | grep "TYPE" | cut -d"=" -f3' > > or: > > "blkid -o export %s | grep \"TYPE\" | cut -d\"=\" -f3" > > > > Still my output is: > > */dev/mmcblk1p1: LABEL="efi" UUID="1084-AA42" TYPE="vfat"* > > > > My expected output should be only: > > *vfat* > > > > Could you guys please do the needful? > > Why not > > blkid %s -o value --match-tag TYPE > > ? Or, better still, > > lsblk %s -n -o FSTYPE > > It's not easy to answer your question about fixing the line you have, > because the output you are getting it not consistent with what you are > showing. (And I can't find the original post that presumably has Python > code I could run myself.) > > The format I get with -o export is: > > DEVNAME=/dev/sda1 > UUID=2726bf5f-2655-4986-815d-e4532374f218 > TYPE=ext3 > PARTUUID=000453d3-01 > > for which > > "blkid %s -o export | grep TYPE | cut -c6-" > > would work. Alternatively I get the result you want from > > "blkid %s -o export | grep TYPE | cut -d= -f2" > > Note that "TYPE" and "=" don't really need to be quoted at all. > > Someone suggested sed, and that too can be used like this: > > blkid %s -o export | sed -ne '/TYPE=/s///p' > > -- > Ben. > -- > https://mail.python.org/mailman/listinfo/python-list > -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
srinivasan writes: > Even after changing as per the below > "blkid -o export %s | grep 'TYPE' | cut -d'=' -f3" > or: > 'blkid -o export %s | grep "TYPE" | cut -d"=" -f3' > or: > "blkid -o export %s | grep \"TYPE\" | cut -d\"=\" -f3" > > Still my output is: > */dev/mmcblk1p1: LABEL="efi" UUID="1084-AA42" TYPE="vfat"* > > My expected output should be only: > *vfat* > > Could you guys please do the needful? Why not blkid %s -o value --match-tag TYPE ? Or, better still, lsblk %s -n -o FSTYPE It's not easy to answer your question about fixing the line you have, because the output you are getting it not consistent with what you are showing. (And I can't find the original post that presumably has Python code I could run myself.) The format I get with -o export is: DEVNAME=/dev/sda1 UUID=2726bf5f-2655-4986-815d-e4532374f218 TYPE=ext3 PARTUUID=000453d3-01 for which "blkid %s -o export | grep TYPE | cut -c6-" would work. Alternatively I get the result you want from "blkid %s -o export | grep TYPE | cut -d= -f2" Note that "TYPE" and "=" don't really need to be quoted at all. Someone suggested sed, and that too can be used like this: blkid %s -o export | sed -ne '/TYPE=/s///p' -- Ben. -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
On Wed, Nov 7, 2018 at 11:42 PM srinivasan wrote: > > Some I managed to fix temporarily as below, might be useful for others. Also > please correct me if anything wrong or for any improvements in the below > > cmd = "blkid -o export %s" % partition_path > out = self._helper.execute_cmd_output_string(cmd) > var = out.split("TYPE=", 1)[1] > quoted = re.compile('(?<=^\")[^"]*') > for string in quoted.findall(var): > return string Leaving aside the fact that MS Comic Sans is known to the State of California to cause cancer, this code is probably okay if you don't mind it being overengineered. Here's a much simpler version, albeit untested: out = subprocess.check_output(["blkid", "-o", "export", partition_path]) for line in out.split("\n"): item, value = line.split("=") if item == "TYPE": return value No helper needed. Safe against command injection. Uses the known format of the command's output; if you want other information as well as the type, you could get that too. ChrisA -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
Some I managed to fix temporarily as below, might be useful for others. Also please correct me if anything wrong or for any improvements in the below cmd = "blkid -o export %s" % partition_path out = self._helper.execute_cmd_output_string(cmd) var = out.split("TYPE=", 1)[1] quoted = re.compile('(?<=^\")[^"]*') for string in quoted.findall(var): return string On Wed, Nov 7, 2018 at 1:39 PM Chris Angelico wrote: > On Wed, Nov 7, 2018 at 11:36 PM Qian Cai wrote: > > > > srinivasan wrote: > > > Even after changing as per the below > > > "blkid -o export %s | grep 'TYPE' | cut -d'=' -f3" > > > or: > > > 'blkid -o export %s | grep "TYPE" | cut -d"=" -f3' > > > or: > > > "blkid -o export %s | grep \"TYPE\" | cut -d\"=\" -f3" > > > > > > Still my output is: > > > */dev/mmcblk1p1: LABEL="efi" UUID="1084-AA42" TYPE="vfat"* > > > > > > My expected output should be only: > > > *vfat* > > > > > > Could you guys please do the needful? > > > > > > > > Perfect place to use sed instead of grep/cut. > > ... or to use subprocess.check_output() to run just the blkid command, > and then do the parsing in Python. > > ChrisA > -- > https://mail.python.org/mailman/listinfo/python-list > -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
On Wed, Nov 7, 2018 at 11:36 PM Qian Cai wrote: > > srinivasan wrote: > > Even after changing as per the below > > "blkid -o export %s | grep 'TYPE' | cut -d'=' -f3" > > or: > > 'blkid -o export %s | grep "TYPE" | cut -d"=" -f3' > > or: > > "blkid -o export %s | grep \"TYPE\" | cut -d\"=\" -f3" > > > > Still my output is: > > */dev/mmcblk1p1: LABEL="efi" UUID="1084-AA42" TYPE="vfat"* > > > > My expected output should be only: > > *vfat* > > > > Could you guys please do the needful? > > > > > Perfect place to use sed instead of grep/cut. ... or to use subprocess.check_output() to run just the blkid command, and then do the parsing in Python. ChrisA -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
srinivasan wrote: > Even after changing as per the below > "blkid -o export %s | grep 'TYPE' | cut -d'=' -f3" > or: > 'blkid -o export %s | grep "TYPE" | cut -d"=" -f3' > or: > "blkid -o export %s | grep \"TYPE\" | cut -d\"=\" -f3" > > Still my output is: > */dev/mmcblk1p1: LABEL="efi" UUID="1084-AA42" TYPE="vfat"* > > My expected output should be only: > *vfat* > > Could you guys please do the needful? > > Perfect place to use sed instead of grep/cut. -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
Even after changing as per the below "blkid -o export %s | grep 'TYPE' | cut -d'=' -f3" or: 'blkid -o export %s | grep "TYPE" | cut -d"=" -f3' or: "blkid -o export %s | grep \"TYPE\" | cut -d\"=\" -f3" Still my output is: */dev/mmcblk1p1: LABEL="efi" UUID="1084-AA42" TYPE="vfat"* My expected output should be only: *vfat* Could you guys please do the needful? On Wed, Nov 7, 2018 at 11:10 AM Brian J. Oney wrote: > On Wed, 2018-11-07 at 10:22 +0100, srinivasan wrote: > > blkid -o export %s | grep \'TYPE\' | cut -d\"=\" -f3 > > You don't need to escape the single quotes. > Try either: > > "blkid -o export %s | grep 'TYPE' | cut -d'=' -f3" > or: > 'blkid -o export %s | grep "TYPE" | cut -d"=" -f3' > or: > "blkid -o export %s | grep \"TYPE\" | cut -d\"=\" -f3" > > HTH > -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
On Wed, 2018-11-07 at 10:22 +0100, srinivasan wrote: > blkid -o export %s | grep \'TYPE\' | cut -d\"=\" -f3 You don't need to escape the single quotes. Try either: "blkid -o export %s | grep 'TYPE' | cut -d'=' -f3" or: 'blkid -o export %s | grep "TYPE" | cut -d"=" -f3' or: "blkid -o export %s | grep \"TYPE\" | cut -d\"=\" -f3" HTH -- https://mail.python.org/mailman/listinfo/python-list
Re: [Tutor] SyntaxError: can't assign to literal while using ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using subprocess module in Python
After changing the line to *"cmd = "blkid -o export %s | grep \'TYPE\' | cut -d\"=\" -f3" % fs"*, Now I dont see the error "SyntaxError: can't assign to literal" This is not returning exactly "*vfat*" instead of this, it is returning as "* /dev/mmcblk1p1: LABEL="efi" UUID="1084-AA42" TYPE="vfat"* " Could you please help me as it seems to be like grep and cut commands are not working in the above line ie., on *cmd = "blkid -o export %s | grep \'TYPE\' | cut -d\"=\" -f3" % fs*? On Wed, Nov 7, 2018 at 9:41 AM Avi Gross wrote: > I may be missing something but it looks like the embedded double quotes > may be a problem in this: > > cmd = "blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % ... > > if you use single quotes as in: > > cut -d"=" > > becomes > > cut -d'=' > > or escape the double quotes with \" and so on ... > > The above seems to be seen as: > > cmd=ALPHA=BETA % ... > > where ALPHA="blkid -o export %s | grep 'TYPE' | cut -d" > and BETA=" -f3" > > Other issues may also be there. > -Original Message- > From: Tutor On Behalf Of > Alan Gauld via Tutor > Sent: Tuesday, November 6, 2018 7:37 PM > To: tu...@python.org > Cc: python-...@python.org > Subject: Re: [Tutor] SyntaxError: can't assign to literal while using > ""blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % (fs)" using > subprocess module in Python > > On 06/11/2018 18:07, srinivasan wrote: > > > bash command in python using subprocess module, I ma seeing the below > > *cmd = "blkid -o export %s | grep 'TYPE' | cut -d"=" -f3" % > > (fs)* > > In general you should try to do as little as possible using bash and > subprocess. Especially try to avoid long pipelines since you are starting a > new OS process for every element in the pipeline. That means, in your case, > you are running 4 processes to get your result - Python, blkid, grep and cut > > Python is designed to do much of what the shell command can do almost as > easily and much more efficiently (no new processes being started). > > In this case just execute the blkid bit in bash because its too difficult > to replicate simply in Python. Then use Python to search for the TYPE lines > and slice them to size. > > That will, in turn, simplify your command string and remove the issue of > multiple quotes. > > > -- > Alan G > Author of the Learn to Program web site > http://www.alan-g.me.uk/ > http://www.amazon.com/author/alan_gauld > Follow my photo-blog on Flickr at: > http://www.flickr.com/photos/alangauldphotos > > > ___ > Tutor maillist - tu...@python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > > ___ > Tutor maillist - tu...@python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > -- https://mail.python.org/mailman/listinfo/python-list