作为我基于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文件,系统也是如此,因此出于安全原因,它无法访问它。仍然在零下方。
答案 0 :(得分:1)
不是直接答案,而是......
我认为最好使用多个命令行选项调用.bat
文件而不是直接调用java。这样您就不需要更改Python程序来添加其他一些选项(例如-Xms2048m
或-Dfile.encoding=utf8
)。
此类.bat
文件也更容易调试。
答案 1 :(得分:0)
你的问题看起来是因为某处的拼写错误造成的。这应该解决它:
答案 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)
您使用的文件路径看起来很奇怪。