rpa版本: 3.4.9
系统: win10
举例打开QQ: win32api.ShellExecute(0,"open",r"D:\360Downloads\Software\Tencent\QQ\Bin\QQScLauncher.exe","","",0)
通过此方法在rpa运行后,qq是正常打开的,任务也是正常运行完成, 但是在退出rpa studio开发工具时, 会几乎同时关闭qq,也就是通过studio打开的软件,在sudio退出时,会被关闭, 生产环境用机器人运行也是存在这种情况,
打开其他软件也是如此
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在RPA(Robotic Process Automation,机器人流程自动化)的场景中,通过代码直接调用系统API来启动应用程序时,确实可能会遇到与父进程(这里是RPA Studio或运行时环境)生命周期绑定的问题。当父进程关闭时,由它启动的子进程(如QQ等应用程序)默认情况下会随着父进程的终止而被关闭。这是因为Windows系统中,默认新创建的进程会继承其父进程的一些属性,包括当父进程结束时,子进程也会随之结束。
为了解决这个问题,可以尝试以下几种方法:
使用后台模式启动:尽量让启动的应用程序不依赖于RPA工具的进程。这可能需要修改你的代码逻辑,尝试以不同的方式启动应用,比如通过批处理脚本间接启动,并确保该脚本能够使应用程序脱离RPA的进程控制。
Detached Process: 尝试寻找一种方式让进程完全独立运行,而不是作为RPA进程的子进程。具体到Python中,这可能意味着你需要利用更底层的API或者第三方库来实现进程的分离。
使用Task Scheduler(任务计划程序):如果条件允许,可以在系统层面设置一个定时任务来启动应用程序,这样即使RPA工具退出,也不会影响到已经由系统任务管理器启动的程序。
Subprocess模块高级用法:Python中的subprocess
模块提供了更多的控制选项,比如使用Popen
函数并设置creationflags=subprocess.DETACHED_PROCESS
标志来创建一个完全独立的进程。示例代码如下:
import subprocess
# Windows下创建独立进程
subprocess.Popen(r"D:\360Downloads\Software\Tencent\QQ\Bin\QQScLauncher.exe", creationflags=subprocess.CREATE_NEW_PROCESS_GROUP if os.name == 'nt' else 0)
请注意,上述代码片段中的CREATE_NEW_PROCESS_GROUP
是针对Windows平台的,用于创建一个新的进程组,使得新进程不再受父进程结束的影响。
start /B
命令(在批处理文件中)或者其他的第三方工具来帮助你以非阻塞且独立的方式启动应用程序。在生产环境中部署时,确保对这些改动进行充分的测试,以验证它们是否满足你的需求且不会引入新的问题。