代码之家  ›  专栏  ›  技术社区  ›  Jason S

使用python子进程运行javaw.exe

  •  0
  • Jason S  · 技术社区  · 12 年前

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

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

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

    我做错了什么?为什么会有这种区别?

    1 回复  |  直到 12 年前
        1
  •  2
  •   Blair Conrad    12 年前

    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.exe 或 shell=True ,这取决于你的心情和需求。