Check if a command is valid
Chris Rebert
clp2 at rebertia.com
Mon Jul 12 23:50:10 EDT 2010
On Mon, Jul 12, 2010 at 6:29 PM, Kenny Meyer <knny.myer at gmail.com> wrote:
> Hello,
>
> I have to figure out if a string is callable on a Linux system. I'm
"callable" seems vague. Is a command string with invalid arguments but
a valid executable "callable"? If no, then there's no general way to
test "callability" without actually running the command.
> actually doing this:
>
> def is_valid_command(command):
> retcode = 100 # initialize
> if command:
> retcode = subprocess.call(command, shell=True)
> if retcode is 0:
That should be `== 0`, not `is 0`. The fact that `is 0` just so
happens to work is an implementation detail.
> 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.
Well, you're not gonna be able to get the command's return code
without actually running it (unless perhaps you're referring to a
return code from the shell itself?).
> What are better ways of doing this?
One idea:
from shlex import split as shell_tokenize
from subprocess import check_output
def is_valid_command(command):
try:
executable = shell_tokenize(command)[0]
except (ValueError, IndexError):# invalid shell syntax
return False
return bool(check_output(['which', executable]))# on the PATH?
Cheers,
Chris
--
http://blog.rebertia.com
More information about the Python-list
mailing list