MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: how to run a shell command in mathematica?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg46573] Re: Re: how to run a shell command in mathematica?
  • From: Daniel Reeves <dreeves at umich.edu>
  • Date: Mon, 23 Feb 2004 22:34:09 -0500 (EST)
  • Organization: University of Michigan Engineering
  • References: <200402030821.DAA17406@smc.vnet.net> <bvq74q$5jj$1@smc.vnet.net> <200402050902.EAA24985@smc.vnet.net> <bvvnck$j4q$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

An alternative to crafting your own mathlink program when you need to
interface with other unix programs is MASH:
  http://ai.eecs.umich.edu/people/dreeves/mash/

--- \/   FROM Yasvir Tesiram AT 04.02.06 09:39 (Feb 6)   \/ ---

> I normally would avoid a reply to such threads but it seems as though 
> as what you have proposed below is overly buttered.  If you use the 
> notebook interface, sure, you need some way of getting all that output 
> back into Mathematica.  Sounds like a a round about way of getting from 
> a to b when you can simply write an entire shell script in Mathematica 
> and push it through to the command line. It's very simple unstructured 
> communication. Why complicate matters? Or is Unix system admin supposed 
> to be shrouded in complexity? If you want to really do it properly with 
> Mathematica, use the proper tool, Mathlink. But by the time you finish 
> writing that C program, there are probably a handful of Unix and 
> Mathematica programs that could have combined to do the job for you in 
> less time without having to look at any output at all.
> Your functions below are more for sanity checking than anything else 
> and its good practice. So triffic (terrific). The basic mechanism of 
> unstructured communication remains the same whether it's Joe Bloggs 
> backyard Unix box or Arthur Marthers Windows desktop. However, Joe 
> Blogss output probably comes out on a terminal window or maybe being 
> tricky, he has it redirected to a console but he has to decipher it and 
> Arthur Marthers gets sent to George Porge for deciphering. In short, 
> keep it simple, or use mathlink.
> 
> All the best.
> Yas
> 
> 
> On Feb 5, 2004, at 3:02 AM, John Jowett wrote:
> 
> > As I have mentioned in previous posts to this group, execution of 
> > command
> > lines in Unix, Linux or Windows is often best done *without*  the Run[]
> > function (by the way, I would be interested to know if anyone sees
> > disadvantages of the following).
> >
> > In this case you could try
> >
> > ReadList["!chmod a+x some-file", Record]
> >
> > (note the exclamation mark) which will return the console output as a 
> > list
> > of strings, avoiding the need for redirection and temporary files.  An
> > equivalent method is
> >
> > Import["!chmod a+x some-file","Lines"]
> >
> > Other options of ReadList or Import allow you to get the output in 
> > other
> > forms, depending on what you want to do with it.   Simply applying 
> > TableForm
> > as in
> >
> > Import["ls -l", "Lines"]//TableForm
> >
> > will display the output in a readable fashion in the notebook 
> > interface.
> >
> > Run[] does have its uses for non-console commands.  E.g. to launch a 
> > new
> > terminal window you need to do
> >
> > Run["xterm&"]
> >
> > and ReadList is not appropriate.
> >
> > As a slightly more complicated example, here are some functions from my
> > personal utilities package that extend Mathematica's system interface 
> > by
> > providing functions for dealing with Unix links.  I use them for
> > de-activating links prior to, e.g., archiving or copying files with 
> > certain
> > programs.   Select[FileNames[],UnixLinkQ]  will give a list of files 
> > that
> > are links and so on.
> >
> >
> > UnixLinkQ::usage:="UnixLinkQ[filename] returns True if a file exists 
> > with
> > the \
> > name filename and is a Unix link.";
> >
> > deUnixLink::usage:="deUnixLink[linkname] if linkname is a Unix link, \
> > de-activates it, replacing it with a file that can be re-activated by \
> > reUnixLink and returns the filename.  Otherwise returns Null.";
> >
> > reUnixLink::usage:="deUnixLink[linkname] if linkname is a Unix link 
> > that has
> > \
> > been de-activated by deUnixLink then it will be re-activated.  
> > Otherwise \
> > returns Null.";
> >
> > UnixLinkQ[fn_String]:=If[Not[$OperatingSystem\[Equal]"Unix"],False,
> >                 StringMatchQ[First[Join[ReadList["!ls -l 
> > "<>fn,String],{"
> > "}]],"*->*"]
> >         ]
> >
> > SetAttributes[UnixLinkQ,Listable]
> >
> >
> >
> > deUnixLink[tlink_String]:=Module[
> >       {llwords=ReadList["!ls -l "<>tlink,Word],newtlink},
> >       If[Length[llwords]\[GreaterEqual]3 &&
> >           llwords\[LeftDoubleBracket]-3\[RightDoubleBracket]==tlink&&
> >           llwords\[LeftDoubleBracket]-2\[RightDoubleBracket]=="->",
> >         ReadList["!rm "<>tlink,Record];
> >         newtlink=OpenWrite[tlink];
> >         WriteString[newtlink,"<<deUnixLinked>>  "];
> >         Write[newtlink,llwords];
> >         Close[newtlink]
> >         ]
> >       ]/;UnixLinkQ[tlink]
> >
> >
> >
> > reUnixLink[tlink_String]:=Module[
> >       {llwords=
> >           If[Not[UnixLinkQ[tlink]]&&
> >               Read[tlink,Word]\[Equal]"<<deUnixLinked>>",
> >             Read[tlink,Expression]
> >             ]},
> >       If[Length[llwords]\[GreaterEqual]3&&
> >           llwords\[LeftDoubleBracket]-3\[RightDoubleBracket]==tlink&&
> >           llwords\[LeftDoubleBracket]-2\[RightDoubleBracket]=="->",
> >         DeleteFile[tlink];
> >         ReadList[
> >           "!ln -s 
> > "<>llwords\[LeftDoubleBracket]-1\[RightDoubleBracket]<>"
> > "<>
> >             llwords\[LeftDoubleBracket]-3\[RightDoubleBracket]];
> >         tlink
> >         ]
> >       ]/;$OperatingSystem\[Equal]"Unix"
> >
> >
> >
> >
> > "Yasvir Tesiram" <tesiramy at omrf.ouhsc.edu> wrote in message
> > news:bvq74q$5jj$1 at smc.vnet.net...
> >> First thing that springs to mind is;
> >>
> >> Run["chmod a+x some-file"]
> >>
> >> A couple of other things spring to mind;
> >> 1. Make sure that SetDirectory has been used prior to Run or specify 
> >> the
> >> full path to the file.
> >> 2. The command above will return the status code of the operation, 0 
> >> for
> >> success. If you get anything else then something went awry.
> >> 3. You can Run["ls -al"] to check the permissions. But note, that you 
> >> will
> >> not get anything in the Notebook interface. You will need to redirect 
> >> the
> >> output of "ls -al", i.e. Run["ls -al > tmp.out"] or similar, then 
> >> read it
> >> into the Mathematica notebook however you please.
> >>
> >> Cheers
> >> Yas
> >>
> >> On Tue, 3 Feb 2004 sunyb at ustc.edu wrote:
> >>
> >>> Hi,
> >>> I want to change some file's mode such as "chmod a+x some-file" in
> >>> mathematica, what should i do?
> >>>
> >>> thx!

-- 
http://ai.eecs.umich.edu/people/dreeves  - -  google://"Daniel Reeves"

Sex without love is an empty experience, but, as empty experiences go,
it's one of the best.
                -- Woody Allen



  • Prev by Date: Re: animation
  • Next by Date: Re: corrected RE: Re: Computing sets of equivalences
  • Previous by thread: Re: Re: how to run a shell command in mathematica?
  • Next by thread: How to plot...