On 3/8/07, Joel Guillod <[EMAIL PROTECTED]> wrote:
How can I implement the following features:

- invoque a shell command in a separate thread, i.e. a non blocking
shell during execution of the command;
- receive a callback message with the output and the error result
when the thread exits?

This would be some function similar to the load command, i.e.:

    shellExecute commandLine [with message callbackMessage]

where
   The commandLine is a string or an expression that evaluates to a
string.
   The callbackMessage is the name of a message to send after the
shell exited.

The callbackMessage signature would be:

   on <callbackMessage> pCmdOutput,pCmdError,pShellError

where
   - pCmdOutput is the value returned by the shell function, i.e. the
result of the sdtout commandLine, including any error messages the
commandLine generates.
   - pCmdError is the error the command generate (sdterr under unix).
   - pShellError is the shell command's exit code.


Hi Joel,

This isn't exactly what you described, but here is how I do it. Start
the shell command running in the background but directing it's output
to a text file. Then have a loop to check for this text file until it
appears or until a time out period has elapsed.

Here is an example script that does a ping. The handler includes the
post-processing of the result, but you can just ignore that.

function checkPing pIP
   put specialFolderPath("Desktop") & "/ping.txt" into tFileName
   if there is a file tFileName then delete file tFileName

   put "ping -c1 -n "  & pIP into tShellCmd
   put " > " & tFileName & " 2>&1 &" after tShellCmd
   get shell(tShellCmd)

   put 0 into timeCheck
   repeat 50 times
       wait 1 tick with messages
       if there is a file tFileName then
           put URL ("file:" & tFileName) into tRes
           if tRes is empty then next repeat  -- file created but no result yet

           put wordOffset("loss", tRes) into tWord
           if tWord = 0 then next repeat -- file created but result
not complete

            put word tWord-2 of tRes into tPercent
           if tPercent = "0%" then return true
           else return false
       end if
   end repeat

   if there is a file tFileName then delete file tFileName
   return false
end checkPing

Cheers,
Sarah
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to