yes mariano can you copy and paste the code there?

Stef

On Nov 17, 2011, at 7:46 PM, Mariano Martinez Peck wrote:

> We could put this in the collaborative book.
> Alberto, let me know if you want a user ;)
> 
> On Wed, Nov 16, 2011 at 6:19 PM, Stéphane Ducasse <[email protected]> 
> wrote:
> Thanks Alberto
> Documentation and sharing are underestimated in our community. What is simple 
> for you may be complex for somebody else and the inverse,
> we are all more poWewerful together :)
> 
> Stef
> 
> On Nov 16, 2011, at 9:25 AM, Alberto Bacchelli wrote:
> 
> >
> > Stéphane Ducasse wrote:
> >>
> >> can you give an example so that people can learn too?
> >>
> >
> > Sure.
> >
> > So I have a simple bash script that calls the vm, the image, and the script:
> >
> > ----------------bash script-----------
> > #!/bin/bash
> >
> > export AN_ENVIRONMENT_VARIABLE=somevalue
> > export SCRIPT_LOG_FILE=afilename
> >
> >
> > "$pharovm_dir"/squeak -plugins "$pharovm_dir" -encoding Latin1 -headless
> > "$pharo_image" "$smalltalk_script" && exit 0
> > echo Something bad happened!
> > exit 1
> > ----------------------------------------
> >
> > the $smalltalk_script is an .st file with the code to be executed (an
> > example later).
> > environment variables, such as AN_ENVIRONMENT_VARIABLE and SCRIPT_LOG_FILE,
> > are useful to pass some info to the smalltalk script in an easy way, here we
> > use SCRIPT_LOG_FILE to save some script's output to a file.
> >
> > Here I put a very simple example based on what I did:
> >
> >
> > ----------------pharo script (aka $smalltalk_script)-----------
> > [| fs environment pid |
> > environment := OSProcess thisOSProcess environment.
> > pid := OSProcess thisOSProcess pid.
> >
> > someValue := (environment at: 'AN_ENVIRONMENT_VARIABLE').
> > fs := FileStream forceNewFileNamed: (environment at: 'SCRIPT_LOG_FILE').
> >
> > loggingBlock := [:message |
> >       fs nextPutAll: TimeStamp now asString, ' [', pid asString, '] ' .
> >       fs nextPutAll: message; nextPut: Character lf.].
> >
> > loggingBlock value: 'Starting script with ', someValue.
> >
> > "do some interesting stuff here"
> > "..."
> >
> > Smalltalk snapshot: false andQuit: true.] on: Error do: [:err | OSProcess
> > thisOSProcess stdErr nextPutAll: err asString; nextPut: Character lf.
> > Smalltalk snapshot: false andQuit: true.]
> > ------------------------------------------
> >
> > A few comments:
> > - with "OSProcess thisOSProcess environment" you can access environment
> > variables as a dictionary (that's why I use them instead of command line
> > arguments)
> > - "OSProcess thisOSProcess pid" gives you the pid of your process, in this
> > way I can make a unix-like log file
> > - "Smalltalk snapshot: false andQuit: true." closes the image correctly at
> > the end of your script and does NOT save the state on the image.
> > - "[...] on: Error do: [:err | OSProcess thisOSProcess stdErr nextPutAll:
> > err asString; nextPut: Character lf. Smalltalk snapshot: false andQuit:
> > true.]" is _VERY_ useful to debug your code. Any time there is an error in
> > the main block, it catches it and prints the message to the console using
> > the standard error. This is essential to be able not to spend ages in trying
> > to understand what went wrong with your script.
> >
> > That's all. I hope it's useful to someone.
> >
> > Cheers,
> > Alberto
> >
> >
> > --
> > View this message in context: 
> > http://forum.world.st/Headless-PetitParser-tp3994446p4075649.html
> > Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
> >
> 
> 
> 
> 
> 
> -- 
> Mariano
> http://marianopeck.wordpress.com
> 


Reply via email to