Check if a command is valid

Chris Rebert clp2 at rebertia.com
Tue Jul 13 10:12:41 EDT 2010


On Tue, Jul 13, 2010 at 4:33 AM, Jean-Michel Pichavant
<jeanmichel at 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



More information about the Python-list mailing list