通过命令行从python调用java程序的奇怪错误

时间:2011-07-06 12:04:35

标签: java python command-line

作为我基于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是一个变量thingie作为参数传递给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文件,系统也是如此,因此出于安全原因,它无法访问它。仍然在零下方。

4 个答案:

答案 0 :(得分:1)

不是直接答案,而是......

我认为最好使用多个命令行选项调用.bat文件而不是直接调用java。这样您就不需要更改Python程序来添加其他一些选项(例如-Xms2048m-Dfile.encoding=utf8)。

此类.bat文件也更容易调试。

答案 1 :(得分:0)

你的问题看起来是因为某处的拼写错误造成的。这应该解决它:

  • 打开Windows资源管理器
  • 右键单击文件
  • 点击“属性”
  • 复制位置
  • 将该位置粘贴到您的脚本中,目录已转义。

答案 2 :(得分:0)

你必须在你的路径上加上引号。

os.system('java -jar "C:\\Documents and Settings\\enginx_mgr.ISIS\\My Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar" %s' % fileNames)

答案 3 :(得分:0)

我很抱歉提供了另一个文件路径解决方案,但没有提及,并且路径的更改似乎可能导致问题。所以,如果你不介意让我感到羞耻?

os.system("java -jar C:\\Documents\ and\ Settings\\enginx_mgr.ISIS\\My\ Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar %s"%fileNames)

我所做的完全不同,就是用反斜杠逃避空间。

你说os.path.exists正在返回True,这很好,但是你试图通过传递一些参数来执行命令行程序。读取参数的程序会因为空格而将字符串解释为多个字符串。

您还可以尝试更改正在使用的引号:

os.system('java -jar "C:\\Documents and Settings\\enginx_mgr.ISIS\\My Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar" %s' % fileNames)

您使用的文件路径看起来很奇怪。