如何将文件名传递给从Python执行的外部命令?

2024-06-26 14:43:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Python脚本中执行命令:

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

但是我得到一个错误package org.htmlcleaner does not exist。在

如果我独立运行javac命令,它执行得很好。。在

我目前的工作方向是C:\Users\MyUsername。在


Tags: import脚本outputprocess执行命令cpusersjar
3条回答

试试看

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

当您运行javac时,通常将env字典中的项作为与java相关的环境变量。asgs建议您需要CLASSPATH。在

你不必把命令分成一个列表,我只是这样做是为了更容易看到整个事情。在

错误不是由python引起的,而是由java子进程引起的。java机器很可能没有找到一些库,这很可能将问题细化为路径配置问题 环境中尚未设置变量类路径。解决方法:

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

请注意,必须转义字符串中的反斜杠(\)。您的示例很好,但是如果您的用户名实际上不是MyUsername,但可能是“nerd”或任何其他构成有效转义序列的字符串,则该命令将失败。 还要确保文件名中没有空格(或者在另一个例子中使用split语法)。在

所以你可能想:

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

相关问题 更多 >