【问题标题】:Running a bat file from python returns an error while it runs directly from cmd从 python 运行 bat 文件在直接从 cmd 运行时返回错误
【发布时间】:2013-10-15 10:26:25
【问题描述】:
Error occurred during initialization of VM.
Could not reserve enough space for object heap.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

bat文件有如下命令:

java -cp stanford-corenlp-3.2.0.jar;stanford-corenlp-3.2.0-models.jar;xom.jar;joda-time.jar;jollyday.jar -Xmx3g edu.stanford.nlp.pipeline.StanfordCoreNLP -props props.properties -filelist filelist.txt

它在 cmd 窗口中运行,没有错误!

我有以下 python 代码:

import os
import subprocess

os.chdir('C:/Users/Christos/Documents/stanford-corenlp-full-2013-06-20/')

p = subprocess.Popen(r'start cmd /c run_mouskos.bat', shell=True)

p.wait()

print 'done'

我还尝试了各种其他方法从 python 执行 bat 文件,但没有成功。我怎样才能不出错地运行它?

【问题讨论】:

  • 您是否尝试过直接在Popen 调用中提供路径?
  • 直接从 Python 运行 java 命令(绕过批处理文件)有什么用吗?
  • 我已经尝试了这两种方法,但我遇到了同样的错误。
  • 直接调用bat是否也在运行?
  • 是的,它工作正常。难道没有办法在没有 Python 参与的情况下运行 bat 文件吗?

标签: java python batch-file


【解决方案1】:

我最近遇到了这个问题。我正在运行一个由 uWSGI 提供服务的 Django 应用程序。我实际上正在运行将 as-limit 参数设置为 512MB 的 uWSGI 进程。在深入研究之后,我发现应用程序使用子进程运行的每个进程都将保持与 uWSGI 进程相同的操作系统限制。

将 as-limit 的值增加到 1GB 后,我无法重现此问题。

也许这对你有帮助

【讨论】:

    【解决方案2】:

    尝试显式设置堆大小:参见Could not reserve enough space for object heap

    这个设置也会受到环境变量的影响——你应该在批处理文件中打印变量(我认为 Windows 上的set 命令会这样做)。这将允许您查看在您尝试过的两种情况下变量是否相同。

    当然,您需要捕获批处理脚本的输出(或使其可见)才能执行比较。

    【讨论】:

    • 我已将以下代码放入 bat 文件 'set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m' 但仍然无法运行。使用 'set' 我检查了两个环境变量,它们是相同的,除了包含 python 设置的 Python cmd 和 django 之一:'DJANGO_SETTINGS_MODULE=python_test.settings' 其中 python_test 是包含程序的项目。它是通过 Django 服务器运行的吗?
    • 那么你有这个东西在一个 Web 应用程序中运行吗?或者它是一个独立的应用程序?
    • 这是一个独立的应用程序
    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多