通过批处理文件启动应用程序,并在脚本结束后保持应用程序运行

问题描述 投票:0回答:2

我有一个 Windows 应用程序,它是通过运行 .bat 文件启动的。这个 .bat 文件在启动 .exe 之前调用不同的东西。

问题是,一旦脚本结束,应用程序也会结束。我认为这个问题与 .exe 需要通过该 .bat 文件启动这一事实有关。

我用Python尝试过的东西:

subprocess.Popen(['cd','path\\to\\the\\script', '&&', 'start.bat' ], shell=True, text=True | subprocess.DETACHED_PROCESS )
time.sleep(10)

睡眠结束后,启动的 .exe 将关闭。

我还尝试了不同的子流程参数,例如

subprocess.CREATE_NEW_PROCESS_GROUP

我也尝试过:

os.system('cd "path\\to\\the\\script" && "start.bat"')

是否有某种方法可以启动该 .bat 文件并使其“真正”保留,因为我认为问题是,当 .bat 文件完成其工作时,它会退出,这会以某种方式把事情搞砸。

调用 .bat 之后在 Python 中创建无限循环听起来不是一个好的解决方案。

我无法直接调用.exe。

.exe 必须永远保留。

python batch-file
2个回答
0
投票

运行 .exe 后,您可以检查它是否运行(参见此线程

这将类似于:

import psutil
while True:
    if "YourEXEProcess" in (p.name() for p in psutil.process_iter(attrs=['name'])):
        time.sleep(some appropriate amount of time)
    else:
        break
end script

0
投票

首先:请不要将您的bat文件命名为“Start.bat”,这可能会导致一些问题,因为start是一个命令,在执行批处理文件时,可能会导致无限循环<3

第二: 这似乎不是一个Python问题,看来批处理文件应该处理这个问题。因此,您可以使用此行在批处理文件中解决此问题:

call "cmd /c start notepad.exe"

只需将 notepad.exe 替换为您的 exe 文件名


第三:我制作了这个Python脚本:

import subprocess
subprocess.Popen(r"D:\draw\StartApp.bat")

这批:

cd /D "%~dp0"
call "cmd /c start draw.exe"

按例外情况工作。希望也能帮助到你。


最后更多关于“呼叫”和“开始”的信息

call在同一个解释器实例中运行给定的脚本,因此它只能用于批处理文件,但它允许被调用的脚本使用set修改调用者的环境。在 Windows NT 中,call 还允许将标签作为子例程进行调用;例如打电话:foo

另一方面,start使用ShellExecute()函数,因此它几乎可以用来打开Windows本身可以打开的所有内容,包括文档、其他文件,甚至Internet URL。 start 还可以选择打开单独的控制台窗口、使用不同的进程优先级以及运行程序而不等待程序完成。但是,如果您将 start 与批处理文件一起使用,它将在单独的解释器中运行,并且调用者不会看到对环境的任何修改。

© www.soinside.com 2019 - 2024. All rights reserved.