List Info

Thread: call shell commands; synchronous return




call shell commands; synchronous return
user name
2008-04-08 06:08:12
Hi,

The method I've been using for submitting shell commands is
asynchronous...

For example:-
     shellCmd := '<long running shell command here>'.
     pipe := FileStream popen: shellCmd dir: FileStream
read.

pipe returns after about a second no matter how long the
shell command 
takes to complete.

Is there a way to call shell commands in a synchronous
fashion?

Thanks
Stephen


_______________________________________________
help-smalltalk mailing list
help-smalltalkgnu.org

http://lists.gnu.org/mailman/listinfo/help-smalltalk

Re: call shell commands; synchronous return
country flaguser name
Switzerland
2008-04-08 06:12:52
Stephen wrote:
> Hi,
> 
> The method I've been using for submitting shell
commands is asynchronous...
> 
> For example:-
>     shellCmd := '<long running shell command
here>'.
>     pipe := FileStream popen: shellCmd dir: FileStream
read.
> 
> pipe returns after about a second no matter how long
the shell command 
> takes to complete.
> 
> Is there a way to call shell commands in a synchronous
fashion?

Smalltalk system: 'abc'

Paolo


_______________________________________________
help-smalltalk mailing list
help-smalltalkgnu.org

http://lists.gnu.org/mailman/listinfo/help-smalltalk

Re: call shell commands; synchronous return
user name
2008-04-08 06:49:05
Paolo Bonzini wrote:
> Smalltalk system: 'abc'
> 
> Paolo
> 

Thanks

shellOut := Smalltalk system: 'sleep 5 && ls -l /etc
&& sleep 10'.
Transcript showCr: shellOut printString.

That worked a treat.

Is there anything one should be aware of when choosing
between the two
ways of calling shell commands? The system: call above
appeals since it
is synchronous and provides the shell output, but just
wondering if
there is a situation when it is better to use the
"Filestream popen:
dir" command.

And is there a way to get access to the standard error
stream?

Thank you again

Stephen



_______________________________________________
help-smalltalk mailing list
help-smalltalkgnu.org

http://lists.gnu.org/mailman/listinfo/help-smalltalk

Re: call shell commands; synchronous return
user name
2008-04-08 07:38:34
> 
> shellOut := Smalltalk system: 'sleep 5 && ls -l
/etc && sleep 10'.
> Transcript showCr: shellOut printString.
> 
> That worked a treat.
> 
> Is there anything one should be aware of when choosing
between the two
> ways of calling shell commands? The system: call above
appeals since it
> is synchronous and provides the shell output, but just
wondering if
> there is a situation when it is better to use the
"Filestream popen:
> dir" command.
> 

Then found that Smalltalk system: returns an integer rather
than the 
shell output.

So here is what I wanted to do:

" Part 1: shut down running VMWare VMs"
shellCmd := '/usr/bin/vmrun list'.
pipe := FileStream popen: shellCmd dir: FileStream read.
pipe linesDo: [: vmName |
    shellCmd2 := '/usr/bin/vmware-cmd %1 stop' bindWith:
vmName.
    pipe2 := FileStream popen: shellCmd2 dir: FileStream
read.     ]

Hence the need for a synchronous call so that the script
waits until 
each machine is shut down.


Thanks
Stephen


_______________________________________________
help-smalltalk mailing list
help-smalltalkgnu.org

http://lists.gnu.org/mailman/listinfo/help-smalltalk

[1-4]

about | contact  Other archives ( Real Estate discussion Medical topics )