作为我的基于python的程序的一部分,我必须调用一个Java程序 - 用os.system()完全解决这个问题。它运行良好,直到我将整个事物从一个目录移到另一个目录。我更改了python代码中的所有文件路径,并且java程序 - 尽我所知,我不太了解java - 依赖于相关文件路径,这些文件路径在移动过程中未被更改。但是现在,java程序不会打开。命令行看起来几乎立即消失,所以我知道os.system()正在工作。它必须与我在os.system中使用的文件路径有关,因为当我将它改回到原始文件路径时,它再次正常工作。代码如下:通过命令行从python调用java程序的奇怪错误
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)
它给了我同样的“无法访问jar文件”的消息,但这次完整的文件路径。在文件路径上试着os.path.exists()
返回true,所以python知道它是一个真正的文件路径;我想这肯定是命令行不同意它,但我不知道为什么。有任何想法吗?
编辑:原始文件路径,如果感兴趣的,是C:\Inetpub\ftproot\JPivSource\jpivc.jar
编辑2:它几乎可以肯定不是文件路径,通过下面的答案和事实去,他们没有工作(和原来的文件路径作品)。从预感中检查安全选项,并且我完全控制.jar文件,就像系统一样,所以它不是因为安全原因无法访问它。仍然在零平方。
你不应该在路径中使用反斜杠。正斜线适用于所有系统,反斜线适用于Windows。除此之外,'subprocess'有一些很好的功能,通过一个数组获取命令和参数,所以你不需要引用等。 – ThiefMaster
我非常怀疑你的两条路径是相同的。这里有一个类似的问题:http://stackoverflow.com/questions/204017/how-do-i-execute-a-program-from-python-os-system-fails-due-to-spaces-in-path – Jacob
你的意思是你实际上在你的系统上重命名为“文档和设置”?或者你是否只在电话中放置了_而不是空格?我建议尝试将jar的名称放在转义引号中:“java -jar \”指向jar \“%s”的路径。 – Nodebody