Я согласен со всем, что сказал Лева7. Тем не менее, я бы предложил другое решение, которое должно использовать raw_input
для Python 2 или input
для Python 3 следующим образом:
args = []
s = raw_input() # input() for Python 3
while s != '':
args.extend([int(arg) for arg in s.strip().split()])
s = raw_input()
Конечно, это не однострочный но это делает работу, и легко понять, как это делается. Кроме того, в конце ввода никаких специальных символов не требуется.
При написании HTA вы должны думать асинхронно. Попробуйте переписать код, чтобы использовать window.setTimeout
. В следующем примере я буду использовать window.setTimeout
для создания звука колокола каждые 2 секунды:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="ie=8">
<title>Bell Test</title>
<script language="VBScript">
Option Explicit
Dim objWShell
Set objWShell = CreateObject("WScript.Shell")
Sub DoPing
divText.innerText = Now
objWShell.Run "%COMSPEC% /c ECHO " & Chr(7), 0, False
window.setTimeOut "DoPing", 2000
End Sub
Sub window_OnLoad
window.ResizeTo 240,130
DoPing
End Sub
</script>
</head>
<body>
<div id="divText">TEST</div>
</body>
</html>
Ожидание (2000) паузы 2 секунды
Sub Wait(Time)
Dim wmiQuery, objWMIService, objPing, objStatus
wmiQuery = "Select * From Win32_PingStatus Where Address = '1.1.1.1' AND Timeout = " & Time
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set objPing = objWMIService.ExecQuery(wmiQuery)
For Each objStatus in objPing
Next
End Sub
Sub Sleep(iMilliSeconds)
With GetObject("winmgmts:\\.\root\cimv2")
With .Get("__IntervalTimerInstruction").SpawnInstance_()
.TimerId = "Sleep"
.IntervalBetweenEvents = iMilliSeconds
.Put_()
End With
.ExecNotificationQuery("SELECT * FROM __TimerEvent WHERE TimerId='Sleep'").NextEvent
End With
End Sub
Добавлено 2015-02-11:
К сожалению, эта функция не работает при использовании Internet Explorer 10 (см. комментарии ниже). Если Internet Explorer 11 установлен, он работает, если вы запустите HTA в качестве администратора.
Access denied
при выполнении .Put_()
. Есть идеи...?
– Teemu
1 June 2013 в 10:49
sleep()
. Я пробовал с VBS, а также перевел ваш код на JavaScript, но в обоих случаях я получаю ошибку Access denied
.
– Teemu
1 June 2013 в 17:30
У меня была та же проблема с HTA. Мое решение с vbs ...
Sub sleep (Timesec)
Set objwsh = CreateObject("WScript.Shell")
objwsh.Run "Timeout /T " & Timesec & " /nobreak" ,0 ,true
Set objwsh = Nothing
End Sub
' example wait for 3 seconds
sleep 3
Процедура вызовет команду оболочки, сведенную к минимуму и без команды клавиатуры. Разрешается только ^ C, но это не будет дано пользователю в этой ситуации.