python subprocess and wget ask-password











up vote
0
down vote

favorite












I'm running the following python code:



import subprocess
host = "ftp://localhost:2121"
p = subprocess.Popen(
['wget', '-P', '/tmp/output', '-N', '-r', '-l', 'inf', '--ask-password', '--user', 'anonymous', host],
stdin=subprocess.PIPE)
p.communicate("passwordn")
if p.returncode != 0:
raise RuntimeError('wget command failed with return code: %d' % p.returncode)


It appears that password is not sent to wget since the script will hang showing:



Password for user ‘anonymous’: 


Pressing enter causes wget to exit with an error code of '1'



Pressing keys then pressing enter causes wget to begin downloading as expected.



The ftp server is local and has anonymous access enabled. Python version is 2.7.8










share|improve this question


























    up vote
    0
    down vote

    favorite












    I'm running the following python code:



    import subprocess
    host = "ftp://localhost:2121"
    p = subprocess.Popen(
    ['wget', '-P', '/tmp/output', '-N', '-r', '-l', 'inf', '--ask-password', '--user', 'anonymous', host],
    stdin=subprocess.PIPE)
    p.communicate("passwordn")
    if p.returncode != 0:
    raise RuntimeError('wget command failed with return code: %d' % p.returncode)


    It appears that password is not sent to wget since the script will hang showing:



    Password for user ‘anonymous’: 


    Pressing enter causes wget to exit with an error code of '1'



    Pressing keys then pressing enter causes wget to begin downloading as expected.



    The ftp server is local and has anonymous access enabled. Python version is 2.7.8










    share|improve this question
























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I'm running the following python code:



      import subprocess
      host = "ftp://localhost:2121"
      p = subprocess.Popen(
      ['wget', '-P', '/tmp/output', '-N', '-r', '-l', 'inf', '--ask-password', '--user', 'anonymous', host],
      stdin=subprocess.PIPE)
      p.communicate("passwordn")
      if p.returncode != 0:
      raise RuntimeError('wget command failed with return code: %d' % p.returncode)


      It appears that password is not sent to wget since the script will hang showing:



      Password for user ‘anonymous’: 


      Pressing enter causes wget to exit with an error code of '1'



      Pressing keys then pressing enter causes wget to begin downloading as expected.



      The ftp server is local and has anonymous access enabled. Python version is 2.7.8










      share|improve this question













      I'm running the following python code:



      import subprocess
      host = "ftp://localhost:2121"
      p = subprocess.Popen(
      ['wget', '-P', '/tmp/output', '-N', '-r', '-l', 'inf', '--ask-password', '--user', 'anonymous', host],
      stdin=subprocess.PIPE)
      p.communicate("passwordn")
      if p.returncode != 0:
      raise RuntimeError('wget command failed with return code: %d' % p.returncode)


      It appears that password is not sent to wget since the script will hang showing:



      Password for user ‘anonymous’: 


      Pressing enter causes wget to exit with an error code of '1'



      Pressing keys then pressing enter causes wget to begin downloading as expected.



      The ftp server is local and has anonymous access enabled. Python version is 2.7.8







      python subprocess






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 19 at 6:32









      Taras

      1,10322443




      1,10322443
























          2 Answers
          2






          active

          oldest

          votes

















          up vote
          0
          down vote













          Try adding this before p.communicate:



          p.stdin.write('passwordn')
          p.stdin.flush()
          stdout, stderr = p.communicate()





          share|improve this answer





















          • No luck :( wget wouldn't be doing something like spinning up a different process to request the password, would it?
            – Taras
            Nov 19 at 6:52










          • I tested it and indeed you're right... this is interesting. Can you just pass the password as an argument or is there a reason you're doing it this way?
            – nico
            Nov 21 at 4:35


















          up vote
          0
          down vote



          accepted










          It appears that wget reads the password from the tty rather than stdin. These are not the same!



          The sudo command allows you to switch to stdin



          also




          Certain programs read directly from /dev/tty, not stdin. "passwd" for example. So it's difficult to script them. Expect is one way around that - it can trick the program by providing input to them:




          One way to achieve reading the password from stdin is to construct a url containing the user & pass:



          ftp://user:password@ftp.server.com/link.txt



          And using the -l - switch to pass the link into wget via stdin. This is suggested here






          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53369417%2fpython-subprocess-and-wget-ask-password%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            0
            down vote













            Try adding this before p.communicate:



            p.stdin.write('passwordn')
            p.stdin.flush()
            stdout, stderr = p.communicate()





            share|improve this answer





















            • No luck :( wget wouldn't be doing something like spinning up a different process to request the password, would it?
              – Taras
              Nov 19 at 6:52










            • I tested it and indeed you're right... this is interesting. Can you just pass the password as an argument or is there a reason you're doing it this way?
              – nico
              Nov 21 at 4:35















            up vote
            0
            down vote













            Try adding this before p.communicate:



            p.stdin.write('passwordn')
            p.stdin.flush()
            stdout, stderr = p.communicate()





            share|improve this answer





















            • No luck :( wget wouldn't be doing something like spinning up a different process to request the password, would it?
              – Taras
              Nov 19 at 6:52










            • I tested it and indeed you're right... this is interesting. Can you just pass the password as an argument or is there a reason you're doing it this way?
              – nico
              Nov 21 at 4:35













            up vote
            0
            down vote










            up vote
            0
            down vote









            Try adding this before p.communicate:



            p.stdin.write('passwordn')
            p.stdin.flush()
            stdout, stderr = p.communicate()





            share|improve this answer












            Try adding this before p.communicate:



            p.stdin.write('passwordn')
            p.stdin.flush()
            stdout, stderr = p.communicate()






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 19 at 6:45









            nico

            1,23431530




            1,23431530












            • No luck :( wget wouldn't be doing something like spinning up a different process to request the password, would it?
              – Taras
              Nov 19 at 6:52










            • I tested it and indeed you're right... this is interesting. Can you just pass the password as an argument or is there a reason you're doing it this way?
              – nico
              Nov 21 at 4:35


















            • No luck :( wget wouldn't be doing something like spinning up a different process to request the password, would it?
              – Taras
              Nov 19 at 6:52










            • I tested it and indeed you're right... this is interesting. Can you just pass the password as an argument or is there a reason you're doing it this way?
              – nico
              Nov 21 at 4:35
















            No luck :( wget wouldn't be doing something like spinning up a different process to request the password, would it?
            – Taras
            Nov 19 at 6:52




            No luck :( wget wouldn't be doing something like spinning up a different process to request the password, would it?
            – Taras
            Nov 19 at 6:52












            I tested it and indeed you're right... this is interesting. Can you just pass the password as an argument or is there a reason you're doing it this way?
            – nico
            Nov 21 at 4:35




            I tested it and indeed you're right... this is interesting. Can you just pass the password as an argument or is there a reason you're doing it this way?
            – nico
            Nov 21 at 4:35












            up vote
            0
            down vote



            accepted










            It appears that wget reads the password from the tty rather than stdin. These are not the same!



            The sudo command allows you to switch to stdin



            also




            Certain programs read directly from /dev/tty, not stdin. "passwd" for example. So it's difficult to script them. Expect is one way around that - it can trick the program by providing input to them:




            One way to achieve reading the password from stdin is to construct a url containing the user & pass:



            ftp://user:password@ftp.server.com/link.txt



            And using the -l - switch to pass the link into wget via stdin. This is suggested here






            share|improve this answer

























              up vote
              0
              down vote



              accepted










              It appears that wget reads the password from the tty rather than stdin. These are not the same!



              The sudo command allows you to switch to stdin



              also




              Certain programs read directly from /dev/tty, not stdin. "passwd" for example. So it's difficult to script them. Expect is one way around that - it can trick the program by providing input to them:




              One way to achieve reading the password from stdin is to construct a url containing the user & pass:



              ftp://user:password@ftp.server.com/link.txt



              And using the -l - switch to pass the link into wget via stdin. This is suggested here






              share|improve this answer























                up vote
                0
                down vote



                accepted







                up vote
                0
                down vote



                accepted






                It appears that wget reads the password from the tty rather than stdin. These are not the same!



                The sudo command allows you to switch to stdin



                also




                Certain programs read directly from /dev/tty, not stdin. "passwd" for example. So it's difficult to script them. Expect is one way around that - it can trick the program by providing input to them:




                One way to achieve reading the password from stdin is to construct a url containing the user & pass:



                ftp://user:password@ftp.server.com/link.txt



                And using the -l - switch to pass the link into wget via stdin. This is suggested here






                share|improve this answer












                It appears that wget reads the password from the tty rather than stdin. These are not the same!



                The sudo command allows you to switch to stdin



                also




                Certain programs read directly from /dev/tty, not stdin. "passwd" for example. So it's difficult to script them. Expect is one way around that - it can trick the program by providing input to them:




                One way to achieve reading the password from stdin is to construct a url containing the user & pass:



                ftp://user:password@ftp.server.com/link.txt



                And using the -l - switch to pass the link into wget via stdin. This is suggested here







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 22 at 1:36









                Taras

                1,10322443




                1,10322443






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53369417%2fpython-subprocess-and-wget-ask-password%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Berounka

                    Different font size/position of beamer's navigation symbols template's content depending on regular/plain...

                    Sphinx de Gizeh