[英]Remotely manipulating the execution of a batch file
我有一個批處理文件,該文件位於從另一台計算機遠程調用的一台計算機上。 該批處理文件非常簡單。 它所做的全部工作就是設置一些環境變量,然后執行一個應用程序-該應用程序創建一個命令窗口並在其中執行。 除非有人在執行“退出”的命令窗口中鍵入命令,否則它將執行的應用程序將永遠運行,這時它將進行一些最終處理並干凈地退出。 如果我僅關閉命令窗口,則出口不干凈,並且由於與該應用程序生成的數據相關的多種不同原因,這是不好的。 我是否可以編寫另一批腳本,將“ quit”命令插入第一個命令窗口,然后退出?
聽起來像我期望使用的工作類型,盡管我從未在Windows下使用過。
您可以使用<從文本文件(而不是控制台)中獲取“退出” ...,但這會在加載后立即退出您的進程。 那行得通嗎? 否則,您可以編寫一個程序以將擊鍵發送到控制台...但是我認為這不是生產質量的把戲。
您可以訪問該應用程序的實際代碼嗎? 如果是這樣,您可以檢查批處理文件。 否則,您可以使用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,因為它易於您調用代碼。 您還可以將其放入循環中,然后等待其運行。
回覆
我會使用python中的subprocess模塊編寫一個小腳本,如下所示:
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才能正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.