我有一个批处理文件位于我从另一台计算机远程调用的一台计算机上。该批处理文件非常简单;它所做的就是设置一些环境变量,然后执行一个应用程序 - 应用程序创建一个命令窗口并在其中执行。它执行的应用程序将永远运行,除非有人在命令窗口中键入它正在执行“退出”,此时它将执行一些最终处理并将干净地退出。如果我只是关闭命令窗口,则退出不干净,并且由于与此应用程序生成的数据相关的许多不同原因而导致这种情况很糟糕。有没有办法让我编写另一个批处理脚本,将“退出”命令插入第一个命令窗口然后退出?
答案 0 :(得分:0)
这听起来像我使用expect的工作类型,尽管我从未在Windows下使用它。
答案 1 :(得分:0)
你可以使用<从文本文件而不是控制台中取出“退出”...但是这会在加载后立即退出。那会有用吗? 否则你可以编写一个程序来向控制台发送击键......但我不认为这是一个生产质量技巧。
答案 2 :(得分:0)
您是否可以访问应用程序的实际代码?如果是这样,您可以检查批处理文件。否则,您可以使用powershell执行以下操作。
$Process = Get-Process | Where-Object {$_.ProcessName -eq "notepad"}If (!($Process))
{ "Process isn't running, do stuff"
}Else
{ $myshell.AppActivate("notepad")
$myshell.sendkeys("Exit")
}
我只是建议使用powershell,因为它很容易调用代码。你也可以放入循环并等待它运行。
RE
答案 3 :(得分:0)
我在python中使用子进程模块编写了一个小脚本,如下所示:
from subprocess import Popen, PIPE
import os
import os.path
import time
app = Popen(['c:/path/to/app.exe', 'arg1', 'arg2'], stdin=PIPE, env = {
'YOUR_ENV_VAR_1': 'value1',
'YOUR_ENV_VAR_2': 'value2',
# etc as needed to fill environment
})
while not os.path.exists('c:/temp/quit-app.tmp'):
time.sleep(60)
app.communicate('quit\n')
print "app return code is %s" % app.returncode
然后,当您想要关闭时,远程调用创建c:/temp/quit-app.tmp
的批处理脚本,等待几分钟,然后删除该文件。
当然,您需要在Windows计算机上安装Python才能实现此功能。