Start Python script fra Windows kommandolinje ved hjælp af system PATH for fil placering

Indlæg af Hanne Mølgaard Plasc

Problem



Dette kan være mere af et generelt Windows-spørgsmål end et Python-spørgsmål, jeg er ikke sikker.


Jeg har en mappe fuld af pythonfiler kaldet GDAL (et geospatialbibliotek). Placeringen af ​​GDAL-biblioteket er gemt i Windows-systemet PATH, så når jeg skriver dette i et Windows-kommandovindue for at kontrollere, at PATH er konfigureret korrekt:


gdal\_retile.py


Jeg får notepad åbning for at vise koden, som jeg ville forvente, da dette er standard applikationen for .py filer på denne pc.


Hvis jeg dog gør det her:


python gdal\_retile.py


Det virker ikke, siger det



  ingen sådan fil eller mappe



Men hvis jeg definerer den fulde sti:


python "C:Program FilesGDALgdal\_retile.py"


Det virker fint. Kan 't PATH bruges som en del af et argument til Python tolken?

Bedste reference


TL: DR; Nej


PATH bruges til at søge efter filen (eksekverbar) du forsøger at køre. Hvis en fil ikke er eksekverbar (f.eks. Tekstfiler), vil Windows forsøge at kigge op hvilket program er registreret til at håndtere filens udvidelse (i dit tilfælde notesblok) en åben den ene, der passerer filens sti som argument for det.


Når først det korrekte program er fundet, kontrolleres først alle de følgende argumenter for at eventuelle \%ENVIRONMENT\_VARIABLE\% pladsholdere skal erstattes med de faktiske værdier, derefter behandles som en liste over rumseparerede strings og sendes til programmet, der starter. Det er programmets opgave at finde ud af, hvad de skal gøre med dem. PATH har ingen afspilning i argumentopløsningen.


Hvorfor er det så?



Argumenter til et program kan være noget. Forestil dig at du forbinder filnavnet til en fil, du vil oprette i den aktuelle mappe. Hvordan kan operativsystemet vide, at det filnavn, du går ind på, ikke er en eksisterende fil, der skal søges i PATH, men en fil, der vil blive oprettet af programmet? Derfor er ansvaret for at håndtere argumenter udelukkende på det program, der startes.

Andre referencer 1


Python betragter ikke systemsti i sine argumenter, ikke engang PYTHONPATH ...


Du kan simulere dette ved hjælp af where for at finde scriptet i stien


where gdal\_retile.py > \%TEMP\%fullp


brug derefter det til at indstille en variabel


set /P C=<\%TEMP\%fullpath


Ring derefter python med den fulde sti


python "\%C\%"


(der er ingen fejlkontrol her på kommandoen where, som ikke kunne returnere noget eller mere end 1 sti, så løsningen er perfekt, men praktisk at starte en anden tolk end den der er forbundet med .py forlængelsen på Windows)