【发布时间】:2011-07-06 12:04:34
【问题描述】:
作为我基于 python 的程序的一部分,我必须调用一个 Java 程序 - 使用 os.system() 完美地解决了这个问题。它运行良好,直到我将整个东西从一个目录移动到另一个目录。我更改了 python 代码中的所有文件路径,而 java 程序——据我所知,我不太了解 java——依赖于相对文件路径,这些路径在移动过程中没有改变。但是现在,java程序不会打开。命令行出现然后几乎立即消失,所以我知道 os.system() 正在工作。它必须与我在 os.system 中使用的文件路径有关,因为当我将其更改回原始文件路径时,它再次完美运行。代码如下:
os.system("java -jar C:\\Documents and Settings\\enginx_mgr.ISIS\\My Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar %s"%fileNames)
fileNames 是作为参数传递给 java 程序的变量,我很确定这不是问题所在。如果我直接从 cmd.exe 调用 python 程序,那么它会返回错误消息“无法访问 Jarfile C:\Documents”。我认为这可能与文件路径中的空格有关,所以我在下面划线:
os.system("java -jar C:\\Documents_and_Settings\\enginx_mgr.ISIS\\My_Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar %s"%fileNames)
它给了我同样的“无法访问 Jarfile”消息,但这次是完整的文件路径。在文件路径上尝试os.path.exists() 会返回true,所以python 知道它是一个真正的文件路径;我想这一定是命令行不同意它,但我不知道为什么。有什么想法吗?
编辑:如果感兴趣的话,原始文件路径是C:\Inetpub\ftproot\JPivSource\jpivc.jar
编辑 2:几乎可以肯定它不是文件路径,通过下面的答案以及它们都不起作用(并且原始文件路径起作用)的事实。出于预感检查了安全选项,我可以完全控制 .jar 文件,系统也是如此,因此并不是出于安全原因它无法访问它。仍然在零平方。
【问题讨论】:
-
您不应该在路径中使用反斜杠。正斜杠适用于所有系统,而反斜杠仅适用于 Windows。除此之外,
subprocess有一些不错的函数通过数组获取命令和参数,因此您不必使用引用等。 -
我非常怀疑您的两条路径是否相同。这是一个类似的问题:stackoverflow.com/questions/204017/…
-
您的意思是您实际上重命名了系统上的“文档和设置”吗?还是您只是在通话中放了 _ 而不是空格?我建议尝试将 jar 的名称放在转义引号中:"java -jar \"path to jar\" %s"。
-
@ThiefMaster;该程序只能在 Windows 上使用,并且由于某种原因它不喜欢正斜杠。不要问我为什么,我不知道,但是如果我使用正斜杠,我的程序的另一部分会给我错误消息。另外,
subprocess不是最好的解决方案,对于这个程序,我确实尝试过,但它无法正确发送变量 fileNames。 -
@Cularis;看到这一点,尝试了一些解决方案,仍然给我“无法访问”错误,这与任何一个都不同。也许它不是文件路径,但如果不是,我不知道是什么原因造成的。 @节点体;第二个。您的解决方案类似于 cularis',但仍然不起作用。
标签: java python command-line