Às 22:38 de 12/10/22, Jon Ribbens escreveu:
On 2022-10-12, Jon Ribbens <jon+use...@unequivocal.eu> wrote:
On 2022-10-12, Paulo da Silva <p_d_a_s_i_l_v_a...@nonetnoaddress.pt> wrote:
Às 19:14 de 12/10/22, Jon Ribbens escreveu:
On 2022-10-12, Paulo da Silva <p_d_a_s_i_l_v_a...@nonetnoaddress.pt> wrote:
Às 05:00 de 12/10/22, Paulo da Silva escreveu:
Hi!

The simple question: How do I find the full path of a shell command
(linux), i.e. how do I obtain the corresponding of, for example,
"type rm" in command line?

The reason:
I have python program that launches a detached rm. It works pretty well
until it is invoked by cron! I suspect that for cron we need to specify
the full path.
Of course I can hardcode /usr/bin/rm. But, is rm always in /usr/bin?
What about other commands?

Thank you all who have responded so far.
I think that the the suggestion of searching the PATH env seems the best.
Another thing that I thought of is that of the 'which', but, to avoid
the mentioned recurrent problem of not knowing where 'which' is I would
use 'type' instead. 'type' is a bash (sh?) command.

If you're using subprocess.run / subprocess.Popen then the computer is
*already* searching PATH for you.
Yes, and it works out of cron.
Your problem must be that your cron
job is being run without PATH being set, perhaps you just need to edit
your crontab to set PATH to something sensible.
I could do that, but I am using /etc/cron.* for convenience.

Or just hard-code your
program to run '/bin/rm' explicitly, which should always work (unless
you're on Windows, of course!)
It can also be in /bin, at least.

I assume you mean /usr/bin. But it doesn't matter. As already
discussed, even if 'rm' is in /usr/bin, it will be in /bin as well
(or /usr/bin and /bin will be symlinks to the same place).

A short idea is to just check /bin/rm and /usr/bin/rm, but I prefer
searching thru PATH env. It only needs to do that once.

I cannot think of any situation in which that will help you. But if for
some reason you really want to do that, you can use the shutil.which()
function from the standard library:

     >>> import shutil
     >>> shutil.which('rm')
     '/usr/bin/rm'

Actually if I'm mentioning shutil I should probably mention
shutil.rmtree() as well, which does the same as 'rm -r', without
needing to find or run any other executables.
Except that you can't have parallel tasks, at least in an easy way.
Using Popen I just launch rm's and end the script.


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to