【问题标题】:using python subprocess to run javaw.exe使用python子进程运行javaw.exe
【发布时间】:2014-10-11 22:50:50
【问题描述】:

我在 Windows 命令提示符中使用 javaw.exe,它在生成我的 Swing java 程序后立即返回。

但是如果我使用 Python 的 subprocess.call() 来做同样的事情,它就会挂起。

import subprocess
retval = subprocess.call(['javaw.exe','-jar','myjar.jar',arg1,arg2])

我做错了什么,为什么会有这种差异?

【问题讨论】:

    标签: java python windows subprocess


    【解决方案1】:

    subprocess.call 将等待进程 (javaw) 完成,如文档中所述:

    运行 args 描述的命令。等待命令完成,然后返回 returncode 属性。

    你应该改用subprocess.Popen

    查看replacing the os.spawn family 的文档:

    pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
    ==>
    pid = Popen(["/bin/mycmd", "myarg"]).pid
    

    在你的情况下,这可能是

    pid = subprocess.Popen(["javaw.exe", "-jar", "myjar.jar", arg1, arg2])
    

    可能会根据您的心情和需要进行调整以获得javaw.exeshell=True 的绝对路径。

    【讨论】:

    • 但是当我从命令提示符运行 javaw.exe 时,它​​会立即完成......还是这样?它在命令提示符下是如何工作的?
    • 这取决于你的 jar 做什么。该进程可能会继续在后台运行,但 Windows 只是将控制权交还给 shell。从 shell 启动后,您是否使用 Windows 任务管理器查找正在运行的进程?
    猜你喜欢
    • 1970-01-01
    • 2020-07-25
    • 2021-12-07
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2022-01-06
    • 2021-11-10
    • 1970-01-01
    相关资源
    最近更新 更多