Anders gezegd, is er een platformonafhankelijke manier om te weten welk bestand zal worden uitgevoerd door subprocess.Popen(file)
zonder het eerst uit te voeren?
Antwoord 1, autoriteit 100%
Ik geloof dat er geen in de Python-bibliotheken is
>>> def which(pgm):
path=os.getenv('PATH')
for p in path.split(os.path.pathsep):
p=os.path.join(p,pgm)
if os.path.exists(p) and os.access(p,os.X_OK):
return p
>>> os.which=which
>>> os.which('ls.exe')
'C:\\GNUwin32\\bin\\ls.exe'
Antwoord 2, autoriteit 94%
Python 3.3 heeft shutil.which()
toegevoegd om een platformonafhankelijke manier te bieden om uitvoerbare bestanden te ontdekken:
http://docs.python.org/3.3/library/shutil.html#shutil .die
Retourneer het pad naar een uitvoerbaar bestand dat zou worden uitgevoerd als de opgegeven cmd werd aangeroepen. Als er geen cmd zou worden aangeroepen, retourneer dan Geen.
Voorbeeldoproepen:
>>> shutil.which("python")
'/usr/local/bin/python'
>>> shutil.which("python")
'C:\\Python33\\python.EXE'
Helaas is dit niet teruggezet naar 2.7.x.
Antwoord 3, autoriteit 90%
Een optie voor Python 2 en 3:
from distutils.spawn import find_executable
find_executable('python') # '/usr/bin/python'
find_executable('does_not_exist') # None
find_executable(executable, path=None)
probeert gewoon ‘executable’ te vinden in de mappen vermeld in ‘path’. Standaard ingesteld op os.environ['PATH']
als ‘path’ None
is. Retourneert het volledige pad naar ‘uitvoerbaar’ of None
indien niet gevonden.
Houd er rekening mee dat, in tegenstelling tot which
, find_executable
niet echt controleert of het resultaat als uitvoerbaar is gemarkeerd. Misschien wilt u os.access(path, os.X_OK)
aanroepen om dat zelf te controleren als u er zeker van wilt zijn dat subprocess.Popen
kan worden uitgevoerd het bestand.
Let ook op: shutil.which
van Python 3.3+ is gebackporteerd en beschikbaar gemaakt voor Python 2.6, 2.7 en 3.x via de externe module whocraft.
Het is beschikbaar voor installatie via de bovengenoemde GitHub-pagina (dwz pip install git+https://github.com/pydanny/whichcraft.git
) of de Python-pakketindex (dwz pip install whichcraft
). Het kan als volgt worden gebruikt:
from whichcraft import which
which('wget') # '/usr/bin/wget'