I just get an errorlevel from the executable when I read stdout, but I can't tell what is going on because, of course, I can't tell what Popen is actually doing. I never see the prompt from the executable that I would expect to see when I read stdout. I originally had the function like this:
def setpassword(user): password = "passworD\n" try: cmd = ' passwd {0}'.format(user) pipe = Popen(p4 + cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True) stdout = pipe.stdout.readline() stderr = pipe.stdin.write(password) time.sleep(1) stdout = pipe.stdout.readline() stderr = pipe.stdin.write(password) if pipe.stdin.close != 0: log("ERROR", "Password reset failed.\n{0}{1} generated the following error: {2}".format(p4, cmd, stderr)) except OSError as err: log("ERROR", "Execution failed: {0}".format(err)) but, the script just hung when I did that. I think it was stuck on the readline, and never got anything from the process. I didn't think that the if statement was incorrect based on examples I saw in the docs, and the fact that it didn't complain about that part, but I'll try the close(): Thanks, Rusty On Tue, Sep 15, 2009 at 4:24 PM, Rhodri James <rho...@wildebst.demon.co.uk>wrote: > On Wed, 16 Sep 2009 00:01:17 +0100, Russell Jackson < > ru...@rcjacksonconsulting.com> wrote: > > Hi, >> I have the following code that works fine in Python 2.x, but I can't seem >> to >> get it to work in Python 3 with Popen. Can you please tell me how to get >> the >> same functionality out of Python 3? The gist of what I doing is in the >> setpassword function. I have tried numerous ways to get this to work, and >> just can't figure it out, and the docs on Popen are no help whatsoever on >> how to use the now open process. The examples completely skip over what to >> do with the process after you open it. >> > > So how did it fail? > > ############################################################################### >> def setpassword(user): >> password = "passworD\n" >> try: >> cmd = ' passwd {0}'.format(user) >> pipe = Popen(p4 + cmd, shell=True, stdin=PIPE, stdout=PIPE, >> stderr=PIPE, universal_newlines=True) >> stderr = pipe.stdin.write(password) >> time.sleep(1) >> stderr = pipe.stdin.write(password) >> if pipe.stdin.close != 0: >> > > Did you perhaps mean "if pipe.stdin.close():" ? > Does it help if you read stdout rather than sleeping for arbitrary periods? > > -- > Rhodri James *-* Wildebeest Herder to the Masses > -- > http://mail.python.org/mailman/listinfo/python-list > -- Rusty 775-636-7402 Office 775-851-1982 Fax
-- http://mail.python.org/mailman/listinfo/python-list