Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Input Enter while Execution of a process

by Corion (Patriarch)
on Sep 04, 2017 at 11:07 UTC ( [id://1198656]=note: print w/replies, xml ) Need Help??


in reply to Input Enter while Execution of a process

Can you show us a short, self-contained example that reproduces your problem? It doesn't have to do anything except sleep and print, but I think it would help us understand your situation.

Please also include the relevant code that you tried and tell us where and how it fails.

  • Comment on Re: Input Enter while Execution of a process

Replies are listed 'Best First'.
Re^2: Input Enter while Execution of a process
by pratikmonu (Novice) on Sep 04, 2017 at 11:59 UTC

    Hi, I am trying to run the Following as a part of my perl Script

    system "/bin/zsh", "$HOME/env/$ENV{DEST_SCRIPT_HOST}/db_silent_install/11gR2-11.2.0.1.0/install.zsh";

    when this Command is Executed, the install.zsh creates DB, and It prompts in the shell to run the mentioned Command as root user, and then Press enter,

    I want to write this system command in such a way that it executes the install.zsh and once the process is paused, it should hit Enter to move the process Ahead

    Thanks PR

      Aah, OK - that helps me understand your problem better.

      Basically you want to monitor the output of the installation script, and if it asks for input (or asks to run some commands as root), you want to do that from your Perl script and then tell the other script to continue.

      First I would look if that installation script itself can invoke or prepend another command (like sudo ...) in front of the needed root commands instead for automated installation.

      If there is no such facility, you can either redirect the output of install.zsh to a file and monitor the file or use IPC::Run3 or Expect to communicate with the installation script.

      Personally, I would try the following approach, launching install.zsh in the background having it write to a file but keeping the input to it open:

      use File::Tail; my $logfile = '/tmp/install.zsh.log'; my $child = open my $install_zsh, "| /bin/zsh $HOME/env/$ENV{DEST_SCRI +PT_HOST}/db_silent_install/11gR2-11.2.0.1.0/install.zsh >$logfile"; # Sleep to give the logfile time to fill sleep 5; my $timeout = time + 60; my $log = File::Tail->new($logfile); while (defined($line=$log->read)) { print "$line"; if( $line =~ /root user/ ) { print "Running magic helper commands as root\n"; system("sudo ...") == 0 or die "$?"; print "Sending ENTER to install script\n"; print $child "\n"; }; }

      Update: s/\$file/\$log/, spotted by johngg

        Thanks , it worked for me

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (2)
As of 2024-04-25 06:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found