我在windows平台上工作。在python脚本中,可以通过以下方式调用外部程序:
os.system("C:\mainfolder\menu.exe C:\others\file1.inp C:\others\file2.inp")
os.popen("C:\mainfolder\menu.exe C:\others\file1.inp C:\others\file2.inp")
subprocess.call(["C:\mainfolder\menu.exe","C:\others\file1.inp" "C:\others\file2.inp"])
其中:
在菜单.exe:是我的外部程序。在
file1和file2:是外部程序的输入文件。在
以上这些都很好。现在,我的外部程序已经成功完成,我需要完全关闭它以及它打开的所有窗口。我浏览了许多其他帖子、python文档等,发现了一些命令,例如:
^{pr2}$但他们没有起作用。我花了很多时间试图找到对我有用的东西,直到我意识到无论我输入了什么命令,它们都不会被读取,因为计算机不知道我的外部程序已经完成。这就是为什么只要输入taskkill/im就可以随时从命令行终止程序菜单.exe但不是python的。在
有人知道怎么解决这个问题吗?,当我调用外部程序时,是否应该包含其他内容?在
如果您想让一个进程立即结束,即等待它结束,这是一个阻塞调用,}使用子进程there。在
os.system()
通常等待,讨论了here以及{如果您想稍后在程序中结束一个进程,一个异步的、非阻塞的进程,可能会得到它的pid,并且取决于
shell=True
是否是{a4}或子进程的pid。在这个pid可以通过使用psutil或os来结束它immediately,或者使用很少的cpu时间wait until it ends,尽管这样其他任务可以在等待时完成,或者可以使用线程。在
下面是一些示例代码,如何检测程序是否打开了窗口。您只需知道消息框的标题,完成后
menu.exe
将打开:我几个月前问过这个问题,现在把我的发现发表在这个问题上可能有点晚了,但它可能对其他读者还是有帮助的。在
在那些试图回答我问题的人的帮助下,特别是丹尼尔的回答,我找到了解决问题的办法。不知道是不是最好的,但我得到了我需要的。在
基本上,我没有在弹出窗口中查找单词“finished”,而是查找外部程序生成的结果。如果生成了这些结果,则表示程序已完成,因此我将终止进程:
相关问题 更多 >
编程相关推荐