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