Python Forum

Full Version: How to answer subprocess prompt
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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"
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.
reaver

The prompt only appears second after I have run the command so I am unable to answer 'y' with the beginning argument
Post the command, please! What it asks for?
(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')?
(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.
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/1635...n-argument
(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/1635...n-argument

Thank you sir. That worked.

I'm still curious on how I could run processes simultaneously and make them communicate.
Probably socket interprocess communication: https://docs.python.org/3/library/ipc.html

Or by pyzmq.