On Tue, Jul 13, 2010 at 4:33 AM, Jean-Michel Pichavant <jeanmic...@sequans.com> wrote: > Kenny Meyer wrote: >> I have to figure out if a string is callable on a Linux system. I'm >> actually doing this: >> >> def is_valid_command(command): >> retcode = 100 # initialize >> if command: >> retcode = subprocess.call(command, shell=True) >> if retcode is 0: >> print "Valid command." >> else: >> print "Looks not so good..." >> >> is_valid_command("ls") >> >> Never mind the code, because this is not the original. >> The side effect of subprocess.call() is that it *actually* executes >> it, but I just need the return code. What are better ways of doing >> this? >> > > I'm not sure I get exactly what you're searching for but here's something > that may help. > > If you just whant to know if a command (without parameter) is a Linux > command (either a builtin, alias of file exe) you can use the "where" > command and inspect its return code, the command is not executed though. > >>where ls > ls is an alias for ls --color=auto -F > ls is /bin/ls >>where apt-get > apt-get is /usr/bin/apt-get >>where doesnotexists > doesnotexists not found > zsh: exit 1
`where` seems to be a zsh built-in: $ # I'm in UR bash $ nonexistent -bash: nonexistent: command not found $ where bash -bash: where: command not found And not everyone has zsh installed, so... I don't see why one shouldn't use the standard `which` *nix command instead. Also, in retrospect, my suggestion should probably have checked the return code rather than the output; more efficient and simple that way. Cheers, Chris -- http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list