Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过命令行从python调用java程序时出现奇怪错误_Java_Python_Command Line - Fatal编程技术网

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

通过命令行从python调用java程序时出现奇怪错误,java,python,command-line,Java,Python,Command Line,作为我基于python的程序的一部分,我必须调用一个Java程序——用os.system()完美地解决了这个问题。它工作得很好,直到我把整个东西从一个目录移到另一个目录。我更改了python代码中的所有文件路径,java程序——据我所知,我并不真正理解java——依赖于相对文件路径,而这些路径在移动过程中没有更改。但是现在,java程序无法打开。命令行出现后几乎立即消失,因此我知道os.system()正在工作。这一定与我在os.system中使用的文件路径有关,因为当我将其更改回原始文件路径时

作为我基于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程序,那么它会返回错误消息“无法访问文件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();我想一定是命令行不同意,但我不知道为什么。有什么想法吗

编辑:如果感兴趣的话,原始文件路径是
C:\Inetpub\ftproot\JPivSource\jpivc.jar


编辑2:这几乎肯定不是文件路径,根据下面的答案和它们都不起作用的事实(以及原始文件路径起作用)。凭直觉检查了安全选项,我可以完全控制.jar文件,系统也是如此,所以它并不是因为安全原因而不能访问它。还是零平方

您的问题似乎是由于某个地方的打字错误造成的。这应该可以解决这个问题:

  • 打开Windows资源管理器
  • 右键单击该文件
  • 单击“属性”
  • 复制位置
  • 将该位置粘贴到脚本中,并转义目录
      不是直接回答,而是

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


      这样的
      .bat
      文件也更容易调试。

      您必须在路径周围加引号


      os.system('java-jar“C:\\Documents and Settings\\engx\u mgr.ISIS\\My Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar“%s”%filename)

      很抱歉,我提供了另一个文件路径解决方案,但没有提到这一点,而且似乎路径的更改可能会导致这个问题。那么,如果你不介意逗我的话

      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)
      

      您正在使用的文件路径看起来确实很奇怪。

      您不应该在路径中使用反斜杠。正斜杠适用于所有系统,而反斜杠仅适用于windows。除此之外,
      subprocess
      还有一些很好的函数,通过数组获取命令和参数,这样您就不必使用引用等。我非常怀疑您的两条路径是否相同。这里有一个类似的问题:您的意思是您实际上重命名了系统上的“文档和设置”吗?还是你只是在通话中用u而不是空格?我建议尝试将jar的名称放在转义引号中:“java-jar\”到jar\%s的路径;该程序只在Windows上使用,出于某些原因,它不喜欢正斜杠。不要问我为什么,我不知道,但是如果我使用正斜杠,程序的另一部分会给我错误消息。另外,
      subprocess
      不是最好的解决方案,对于这个程序,我确实尝试过,但它无法正确发送变量文件名。@Cularis;看到了,尝试了一些解决方案后,仍然会出现“无法访问”错误,这与任何其他解决方案都不同。可能不是文件路径,但如果不是,我不知道是什么导致了它@节点体;第二个。您的解决方案与cularis类似,但仍然不起作用。这绝对不是打字错误。我开始认为这实际上不是导致错误的文件路径,但我不知道它是什么。