Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^2: Correct way to use Net:SSH2 module

by MikeKulls2 (Novice)
on Mar 21, 2013 at 04:04 UTC ( #1024657=note: print w/replies, xml ) Need Help??


in reply to Re: Correct way to use Net:SSH2 module
in thread Correct way to use Net:SSH2 module

OK, I can see how that works. It knows when the response has finished because the remote end disconnects. Interestingly the documentation states that your code won't work if run a second time, although it does appear to work.
  • Comment on Re^2: Correct way to use Net:SSH2 module

Replies are listed 'Best First'.
Re^3: Correct way to use Net:SSH2 module
by salva (Abbot) on Mar 21, 2013 at 09:30 UTC
    No, the documentation says you can not reuse a channel once it has been closed. But you can open several channels, even in parallel, over the same connection.

    BTW, you should also check Net::SSH::Any.

      Sorry, I misread your code, I see that you are creating a new channel for each call. The function being called channel instead of createChannel or newChannel threw me :-) With regards my original question, if I connect with shell instead of exec would I be correct in saying there is no way to tell when the end of the response has been received? Why does it not return the prompt? Also, with your code, why does a poll time of 500ms work perfectly well with a command like "ls;sleep 5;ls;"? When I reduce the poll time to 100ms it times out.
        Sorry, I misread your code
        My code? I suppose you mean GrandFather code in Re: Correct way to use Net:SSH2 module!

        if I connect with shell instead of exec would I be correct in saying there is no way to tell when the end of the response has been received?

        Yes, if you run a shell, you have to use some heuristic as looking for the prompt or delaying for a while to detect or ensure that the command is done.

        why does a poll time of 500ms work perfectly well with a command like "ls;sleep 5;ls;"? When I reduce the poll time to 100ms it times out

        Because that code is broken!

        As the SSH object is not set to work in non-blocking mode, once some data becomes available in the channel the code gets stuck in the inner loop where read is called until the channel is closed by the remote side. Then, it runs again the outer loop where it gets the channel_closed event and exits.

        When the timeout is set to 100ms, sometimes it will expire before any data from the first ls command arrives and so never entering the inner loop.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1024657]
help
Chatterbox?
Discipulus was a question
[GotToBTru]: current job found me
Discipulus is so lucky to have a decent job, with old, favorable contract, done before the ultralibersm arrived in Eataly
[Lady_Aleena]: Has anyone here ever use pcregrep? I can't seem to get the --include regex right. --include=*.p[lm] works in grep but not pcregrep.
[erix]: to lift your spirits, here is some more happy Randy news...
[Lady_Aleena]: The reason I would like to use pcregrep is because it can do multiline searches supposedly.
[perldigious]: What are your criteria for looking Tanktalus? What things must a job have for you to consider it? And where are you in your career? Start, middle, or end?
[erix]: are there any regex-engines that do not do multiline?
[Lady_Aleena]: erix, grep doesn't.
[Lady_Aleena]: Linux grep that is...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (9)
As of 2017-05-23 19:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?