Hi Martin, Martin Hennecke <hennecke@fnal.gov> wrote concerning Re: [ROOT] getopt + root [Tue, 12 Nov 2002 10:15:21 -0600 (CST)] ---------------------------------------------------------------------- > > Hi Rene > > Sure, one can do it that way but I think using getopt is more > elegant ;-) As you are probably aware of, you're mixing apples and pears here. The interactive ROOT interpretor (root or root.exe) is the one that gets the arguments from the command line - not your script. The global object `gApplication' of class `TRint', which is a sub-class of `TApplication', however contains the command line arguments, and you can access those via member functions `TApplication::Argc' and `TApplication::Argv'. You can use those member functions to get the values, and do you're command line parsing based on those if you like: #!/usr/bin/root.exe -l -b -q foo.C { int argc = gApplication->Argc(); char** argv = gApplication->Argv(); cout << "There was " << argc << "arguments on the command line" << endl; for (int i = 0; i < argc; i++) cout << "Argument # " << i << ": " << argv[i] << endl; return 0; } Incidentally, I once wrote a set of classes to handle command line parameters in ROOT based applications. You can find them at my web-site [1]. With those classes, you could do something like: #!/usr/bin/root.exe -l -b -q foo.C { TIntOption intOption('i', "int", "integer", 0); TFloatOption floatOption('f', "float", "floating point", .1); TStringOption stringOption('s', "string", "string", "hello"); TBoolOption boolOption('b', "bool", "boolean", kTRUE); TBoolOption helpOption('h', "help", "help", kFALSE); TCommandLine::Instance()->ProcessCommandLine(gApplication->Argc(), gApplication->Argv()); if (helpOption) TCommandLine::Instance()->Print(); for (Int_t i = 0; i < stringOption.GetNValues(); i++) { cout << "The " << i << (i==1 ? "st" : (i==2 ? "nd" : (i==3 ? "rd" : "th"))) << " value of string options is: " << stringOption->GetValue(i) << endl; } The option classes should really be a template, but unfortunately I wasn't really familiar with the template caveats of ROOT when I wrote the classes, so ... :-( A word of warning: Don't use interpretor lines for anything installed outside of the regular Unix tree (/bin, /usr/bin, /usr/local/bin) - it's not portable, and some systems may even disallow it. Also, note that `root' spawns a child process (`root.exe'), and `TApplication' may choke on unknown command line options. I'd really like to see `TApplication' being a lot more flexible when it comes to command line options. Perhaps some sort of integration of the above mentioned classes wouldn't be such a bad idea. Yours, ___ | Christian Holm Christensen |_| | ------------------------------------------------------------- | | Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91 _| DK-2200 Copenhagen N Cell: (+45) 24 61 85 91 _| Denmark Office: (+45) 353 25 305 ____| Email: cholm@nbi.dk Web: www.nbi.dk/~cholm | | [1] http://cholm.home.cern.ch/cholm/root/#toption
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:17 MET