开发者

How can I pass file names to external commands executed from Python?

I am trying to execute a command inside a Python script:

import subprocess
output_process = 
   subprocess.Popen("javac -cp C:\Users\MyUsername\Desktop\htmlcleaner-2.2.jar Scrapping_lastfm.java",
                    shell=True, stdout=subprocess.PIPE)

But I am getting an error package org.htmlcleaner does not exist.

If I run the javac command independently, it executes fine..

My current working directry is 开发者_Go百科C:\Users\MyUsername.


The error is not raised by python but by the java subprocess. Most likely the java machine is not finding some libraries, and that refines the problem to a PATH configuration problem, most likely the variable CLASSPATH has not been set in the environment. to solve :

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'})


Try

output_process = subprocess.Popen(["javac", "-cp", 
    "C:\Users\MyUsername\Desktop\htmlcleaner-2.2.jar", "Scrapping_lastfm.java"],
    shell=True, stdout=subprocess.PIPE, env={'ENVIRONMENTAL': '/variables/here'})

with whatever java-related environmental variables you have when you run javac normally as items in the env dictionary. asgs suggests you need CLASSPATH.

You don't have to split the command up into a list I just did that to make it easier to see the whole thing.


Be aware, that you have to escape the backslash (\) in the string. Your example is fine, however if your username is not actually MyUsername but maybe „nerd“ or any other string forming a valid escape-sequence, the command will fail. Also make sure that you don't have spaces in the filename (or use the split syntax in the other example).

So you might want to do:

output_process = subprocess.Popen(["javac", "-cp", 
    "C:\\Users\\MyUsername\\Desktop\\htmlcleaner-2.2.jar", "Scrapping_lastfm.java"],
    shell=True, stdout=subprocess.PIPE)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜