Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^5: How to execute external programs from perl script

by Anonyrnous Monk (Hermit)
on Feb 04, 2011 at 17:30 UTC ( #886258=note: print w/ replies, xml ) Need Help??


in reply to Re^4: How to execute external programs from perl script
in thread How to execute external programs from perl script

There should be no need to add delays in between outputting the characters.  As I tried to explain, the OS takes care of storing echo's output until it has been read. It shouldn't matter if the consuming side takes a while to get done; the OS will happily keep the data in the fridge...

If you still wanted to do what you were trying above, you'd need to add a pair of parentheses around the echos and sleeps (aka subshell), so the collective output would be piped into phylib.  As you have it, only the last echo "r" would be piped.

Compare the following  (I replaced your phylib with a bit of Perl code that also reads 3 chars):

$ echo abc | perl -e'for (1..3) {print "Q$_ -> "; read STDIN,$r,1; pri +nt "$r\n"; sleep 2}' Q1 -> a Q2 -> b Q3 -> c

Here, the reading side is slow, but as you can see, every answer still ends up where expected.

The net effect of putting the delays on the other side (in between the echos), will superficially behave the same, but the difference is that the reading end will now have to wait until data becomes available:

$ (echo -n a; sleep 2; echo -n b; sleep 2; echo -n c) | perl -e'for (1 +..3) {print "Q$_ -> "; read STDIN,$r,1; print "$r\n";}' Q1 -> a Q2 -> b Q3 -> c

I.e., in both cases, there will be 2 sec intervals between outputting Q/A's.

As for phylib aborting after the first input... are you sure it reads char-by-char, or does it maybe read lines (i.e. characters up until a newline)? In the latter case, you'd need to have echo output \n in between characters, or else the entire "rYr" would be consumed by the first read...

P.S.: echo -e interpolates escapes (like "\n"), and echo -n suppresses outputting of a trailing newline (which you don't want in case the program is reading char-by-char).   (Update: at least that's what the bash builtin echo, and /bin/echo on Linux does — unfortunately, different versions of echo are notoriously known for their incompatibilities wrt behavior and options...)


Comment on Re^5: How to execute external programs from perl script
Select or Download Code
Re^6: How to execute external programs from perl script
by chak9988 (Initiate) on Feb 04, 2011 at 18:42 UTC
    system 'echo "r\ny\nr" | phylip sub_program_1';

    Hurray... it runs perfectly well :-) Your observation, to include "\n" after each alphabet is correct way to run "phylip"

    you wrote in Re^3..
    Try system 'echo "rYr" | phylip sub_program_1'; or system 'echo -e "r\nY\nr" | phylip sub_program_1';

    By giving "\n" and "- e", "phylip" was overfed. So, It didn't work that time.

    After you have explained function of "-e" and "-n" in Re^5, I removed "-e" and it worked perfectly well.

    I appreciate your help,

    Cheers

    Chak
Re^6: How to execute external programs from perl script
by Anonymous Monk on Mar 04, 2011 at 11:30 UTC

    I have a query on perl system command. I would like to learn from perl monks how to place variables inside system command ?

    In the script below, program "phylip" generates two output files and asks user to name them. I want to name the first output file as "blah.txt" and second as "blah.xls".

    $filename ="blah.doc"; .... .... $filename =~ s/\.doc//; system 'echo "$filename.txt\n$filename.xls\n" | phylip';

    (blah.doc is the input file, I use at the beginning of a long script)

    when I run above script, "phylip" doesn't recongnize either of the filenames. Can anyone advise me, how to go about doing this ?

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://886258]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (14)
As of 2014-07-23 20:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (152 votes), past polls