windows - Hvordan kan jeg sende filnavne til eksterne kommandoer udført fra Python?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at udføre en kommando inde i et Python script:


import subprocess
output\_process = 
   subprocess.Popen("javac -cp C:UsersMyUsernameDesktophtmlcleaner-2.2.jar Scrapping\_lastfm.java",
                    shell=True, stdout=subprocess.PIPE)


Men jeg får en fejl package org.htmlcleaner does not exist.


Hvis jeg kører javac-kommandoen uafhængigt, udføres den fint ..


Min nuværende arbejdsdirektør er C:UsersMyUsername.

Bedste reference


Fejlen hæves ikke af python, men ved Java-underprocessen. Det er sandsynligvis, at java-maskine ikke finder nogle biblioteker, og det er sandsynligvis det, der ændrer problemet til et PATH-konfigurationsproblem
variablen CLASSPATH er ikke indstillet i miljøet. at løse :


import shlex

JAVA\_COMMAND=r"javac -cp C:\Users\MyUsername\Desktop\htmlcleaner-2.2.jar Scrapping\_lastfm.java"

cmdline = shlex.split(JAVA\_COMMAND)

output\_process = subprocess.Popen(cmdline,shell=True, stdout=subprocess.PIPE, env={'CLASSPATH':'/path/to/java/packages'})

Andre referencer 1


Prøve


output\_process = subprocess.Popen(["javac", "-cp", 
    "C:UsersMyUsernameDesktophtmlcleaner-2.2.jar", "Scrapping\_lastfm.java"],
    shell=True, stdout=subprocess.PIPE, env={'ENVIRONMENTAL': '/variables/here'})


med uanset java-relaterede miljøvariabler, du har, når du kører javac normalt som elementer i env ordbogen. asgs antyder at du har brug for CLASSPATH.


Du behøver ikke at splitte kommandoen op i en liste, jeg gjorde netop det for at gøre det nemmere at se det hele.

Andre referencer 2


Vær opmærksom på, at du skal undslippe backslashet () i strengen. Dit eksempel er fint, men hvis dit brugernavn ikke er faktisk MyUsername, men måske 'nerd' eller en hvilken som helst anden streng, der danner en gyldig escape-sekvens, vil kommandoen mislykkes.
Sørg også for, at du ikke har mellemrum i filnavnet (eller brug split-syntaksen i det andet eksempel).


Så du vil måske gøre:


output\_process = subprocess.Popen(["javac", "-cp", 
    "C:\Users\MyUsername\Desktop\htmlcleaner-2.2.jar", "Scrapping\_lastfm.java"],
    shell=True, stdout=subprocess.PIPE)