Python Forum
How to answer subprocess prompt - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: How to answer subprocess prompt (/thread-8252.html)



How to answer subprocess prompt - Monty - Feb-11-2018

When I run: python3.5 script.py
Which has:
process = Popen(['command args more args'], stdin=PIPE, stdout=PIPE, shell=True)
The command will prompt me to respond in Y or N with enter continue from a previous session.
This is something that I would respond Y enter
But I am unable to figure out how to respond to it
I have tried
yes = str("Y")
ayes = bytes(yes, 'utf-8')
process.communicate(ayes) #didn't bring even the Y into the console prompt

I've tried
process.communicate('Y\n') #TypeError: memoryview: a bytes-like object is required, not 'str'

and quite a lot of combinations, but I can't seem to get it to work. The machine is running linux with python3.5

I have no idea how to resolve it, even if I type Y manually into the console then it would say: "bash: y: command not found"


RE: How to answer subprocess prompt - wavic - Feb-12-2018

Which command do you run in subprocess? Usually, the programmes asking you y/n have an option -y. You can just add it to the parameters when you call it.


RE: How to answer subprocess prompt - Monty - Feb-12-2018

reaver

The prompt only appears second after I have run the command so I am unable to answer 'y' with the beginning argument


RE: How to answer subprocess prompt - wavic - Feb-13-2018

Post the command, please! What it asks for?


RE: How to answer subprocess prompt - nilamo - Feb-13-2018

(Feb-11-2018, 09:49 PM)Monty Wrote: I've tried
process.communicate('Y\n') #TypeError: memoryview: a bytes-like object is required, not 'str'


A bytes-like object can be created by putting a b in front of your string. Have you tried: process.communicate(b'Y\n')?


RE: How to answer subprocess prompt - Monty - Feb-13-2018

(Feb-13-2018, 05:18 PM)wavic Wrote: Post the command, please! What it asks for?

process = Popen(['reaver -i wlan1mon -b my:ap:ma:ca:dr:es'], stdin=PIPE, stdout=PIPE, shell=True)
after this is run the console prompts: "Restore previous session for my:ap:ma:ca:dr:es? [n/Y]


(Feb-13-2018, 05:37 PM)nilamo Wrote:
(Feb-11-2018, 09:49 PM)Monty Wrote: I've tried
process.communicate('Y\n') #TypeError: memoryview: a bytes-like object is required, not 'str'


A bytes-like object can be created by putting a b in front of your string. Have you tried: process.communicate(b'Y\n')?

I did try process.communicate(b'Y\n')
But it doesn't run it. I'm guessing it gets stuck on that line when it prompts to continue, if that is the case then the subprocess line would never get completed. Perhaps I need another script to answer to this prompt?

Perhaps I could work-around this by creating a bash script to run a python file with only that line in the background and in the next line it would communicate to that stuck line. Seems like a stupid idea though, there must be a better way.


RE: How to answer subprocess prompt - wavic - Feb-13-2018

Well, -a flag was removed from the program arguments. There is a discussion to add -y flag but appears that that isn't done yet. One option is to use -s /usr/local/etc/reaver/<BSSID>.wpc option where <BSSID>.wpc is the session file.

https://github.com/shift/reaver-wps/issues/234

By the way, see this: https://stackoverflow.com/questions/163542/python-how-do-i-pass-a-string-into-subprocess-popen-using-the-stdin-argument


RE: How to answer subprocess prompt - Monty - Feb-13-2018

(Feb-13-2018, 06:29 PM)wavic Wrote: Well, -a flag was removed from the program arguments. There is a discussion to add -y flag but appears that that isn't done yet. One option is to use -s /usr/local/etc/reaver/<BSSID>.wpc option where <BSSID>.wpc is the session file.

https://github.com/shift/reaver-wps/issues/234

By the way, see this: https://stackoverflow.com/questions/163542/python-how-do-i-pass-a-string-into-subprocess-popen-using-the-stdin-argument

Thank you sir. That worked.

I'm still curious on how I could run processes simultaneously and make them communicate.


RE: How to answer subprocess prompt - wavic - Feb-14-2018

Probably socket interprocess communication: https://docs.python.org/3/library/ipc.html

Or by pyzmq.