【问题标题】:Run a batch file in Python which contains java command在 Python 中运行包含 java 命令的批处理文件
【发布时间】:2020-02-27 19:30:14
【问题描述】:

当你在 python 中手动执行一个 .bat 文件时,它是非常令人沮丧的。

我在这里附上我的代码:

directory = 'E:/'
with open(os.path.join(directory, 'output_file.bat'), 'w') as OPATH:
    OPATH.writelines(['"""',"\n"'E:',"\n",
                      'javacCreatingUser.java',"\n",'javaCreatingUser',"\n",'"""'])

os.system("E:/output_file.bat")

以上是我的 python 代码,它使用 2 个 java 命令创建一个 bat 文件

  1. javac CreatingUser.java
  2. java CreatingUser

我可以手动运行 .bat 文件,它工作正常,但我的 python 脚本给了我以下错误:

java.lang.NoClassDefFoundError: oracle/iam/identity/exception/ValidationFailedException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.privateGetMethodRecursive(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: oracle.iam.identity.exception.ValidationFailedException
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 7 more
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" '"""' is not recognized as an internal or external command,

operable program or batch file.

问题是,如果我的文件中缺少某些类,那么它也不应该手动执行,但手动执行是可以的。

【问题讨论】:

  • 你的 writelines 中 javac 后面是否需要一个空格?
  • Windows 系统上的路径中有反斜杠,而不是正斜杠。

标签: java python batch-file


【解决方案1】:
javac CreatingUser.java
java CreatingUser

这是问题的根源:您只编译一个类文件,然后在没有类路径的情况下调用该类。

Java 有一个类似于 Python 的类的搜索路径 PYTHONPATH,称为 classpath

你可以试试这个:

javac CreatingUser.java
java -classpath YOUR_CLASSPATH CreatingUser

YOUR_CLASSPATH 可以是冒号 (Linux) 或分号 (Windows) 分隔的 JAR 文件列表和包含类文件的目录。让您的类路径指向您需要的 JAR,这样就可以了。

【讨论】:

  • 感谢您的帮助,不过我已经更新了环境变量中的类路径
  • 以及为什么我能够手动执行 bat 文件而不传递类路径但不能通过 python 脚本
  • 你想要E:\output_file.bat
  • 在你的类路径中使用绝对路径。相对路径将始终取决于您当前的工作目录。
猜你喜欢
  • 2014-12-25
  • 2022-11-06
  • 2018-07-31
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 2011-04-10
相关资源
最近更新 更多