Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #51371
| Date | 2013-07-27 14:06 -0400 |
|---|---|
| From | Devyn Collier Johnson <devyncjohnson@gmail.com> |
| Subject | Re: Critic my module |
| References | <51F1270E.6000704@Gmail.com> <CAEk9e3p87UrDo_6jMzvVM_eyDO85ZeRUJYVO5KngnK+q95ea7A@mail.gmail.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.5183.1374948401.3114.python-list@python.org> (permalink) |
[Multipart message — attachments visible in raw view] - view raw
On 07/27/2013 11:14 AM, Jason Swails wrote:
> You've gotten plenty of good advice from people discussing the coding
> and coding style itself, I'll provide some feedback from the vantage
> point of a perspective user.
>
>
> On Thu, Jul 25, 2013 at 9:24 AM, Devyn Collier Johnson
> <devyncjohnson@gmail.com <mailto:devyncjohnson@gmail.com>> wrote:
>
> Aloha Python Users!
>
> I made a Python3 module that allows users to use certain Linux
> shell commands from Python3 more easily than using os.system(),
> subprocess.Popen(), or subprocess.getoutput(). This module (once
> placed with the other modules) can be used like this
>
> import boash; boash.ls <http://boash.ls>()
>
>
> I actually wrote a program recently in which I wanted access to unix
> "ls" command, and I wanted it to behave as close to the real, UNIX
> "ls" as possible.
>
> This would seem like a perfect use-case for your module, but the
> problem is that the 'ls' command in your module does not behave much
> like the real 'ls' command. You never let any of the 'system'
> commands in your module access any arguments. More often than not, I
> use "ls" with several command-line arguments, like:
>
> ls --color=auto -lthr dir_basename*/
>
> Even if you're just spawning 'ls' directly, this is actually
> non-trivial to implement. You need globbing on all non-option
> arguments, you may want to pass up the return code somehow, depending
> on what the user wants to do:
>
> [bash ]$ ls nodir
> ls: nodir: No such file or directory
> [bash ]$ echo $?
> 1
>
> Also, 'ls' in the terminal behaves like "ls -C" when called from your
> module. In the framework of my program, my 'ls' command looks like this:
>
> class ls(Action):
> """
> Lists directory contents. Like UNIX 'ls'
> """
> needs_parm = False
> def init(self, arg_list):
> from glob import glob
> self.args = []
> # Process the argument list to mimic the real ls as much as possible
> while True:
> try:
> arg = arg_list.get_next_string()
> if not arg.startswith('-'):
> # Glob this argument
> globarg = glob(arg)
> if len(globarg) > 0:
> self.args.extend(globarg)
> else:
> self.args.append(arg)
> else:
> self.args.append(arg)
> except NoArgument:
> break
>
> def __str__(self):
> from subprocess import Popen, PIPE
> process = Popen(['/bin/ls', '-C'] + self.args, stdout=PIPE,
> stderr=PIPE)
> out, err = process.communicate('')
> process.wait()
> return out + err
>
> [I have omitted the Action base class, which processes the user
> command-line arguments and passes it to the init() method in arg_list
> -- this listing was just to give you a basic idea of the complexity of
> getting a true-er 'ls' command].
>
> Your 'uname' command is likewise limited (and the printout looks strange:
>
> >>> print(platform.uname())
> ('Linux', 'Batman', '3.3.8-gentoo', '#1 SMP Fri Oct 5 14:14:57 EDT
> 2012', 'x86_64', 'AMD FX(tm)-6100 Six-Core Processor')
>
> Whereas:
>
> [bash $] uname -a
> Linux Batman 3.3.8-gentoo #1 SMP Fri Oct 5 14:14:57 EDT 2012 x86_64
> AMD FX(tm)-6100 Six-Core Processor AuthenticAMD GNU/Linux
>
> You may want to change that to:
>
> def uname():
> print(' '.join(platform.uname()))
>
> Although again, oftentimes people want only something specific from
> uname (like -m or -n).
>
> HTH,
> Jason
>
For now, I will decide if it would be worth my time to make such a
module seeing that many feel that it may not be useful. Thank you all
for your feedback.
Mahalo,
DCJ
Back to comp.lang.python | Previous | Next | Find similar | Unroll thread
Re: Critic my module Devyn Collier Johnson <devyncjohnson@gmail.com> - 2013-07-27 14:06 -0400
csiph-web