[Date Index]
[Thread Index]
[Author Index]
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...**
| |