Программа на Bash:
user@root:~/Downloads# ./program
What is the password?
Таким образом, он запрашивает ввод, и если вы получите правильный пароль, он продолжит работу с программой, иначе он выйдет (ради вопроса, пароль - это число от 0 до 1000).
Мне нужно написать сценарий Python 2 для перебора пароля. Я полагаю, что псевдокод будет примерно таким:
import subprocess
x = 0
while x <= 1000:
subprocess.Popen('./program', stdin=PIPE)
input x
if program exits:
continue
else:
break
x += 1
У меня есть базовые знания очень об использовании Popen для запуска команды в терминале, однако я не уверен, как вводить строку с помощью подпроцесса - любой поиск в Google просто приводит меня к людям, которые делают другие вещи с другими входами.
Я также застрял в том, как проверить, вышла ли программа или нет.
Спасибо :)






Вы можете попробовать что-то вроде этого:
from subprocess import check_output
import shlex
output = check_output(shlex.split(your_command_as_string))
Если ваша программа не принимает пароль в качестве аргумента командной строки, вы можете использовать следующий метод:
import subprocess
import shlex
prog = subprocess.Popen(
shlex.split(your_command_as_string),
stdin=subprocess.PIPE
) # run program with piped stdin
for password in your_passwords:
prog.stdin.write("{}\n".format(password)) # feed password
if prog.Poll() is not None: # check if program finished
print(password)
break
Использование Popen's communicate будет работать здесь:
import subprocess
for x in range(0,1000):
proc = subprocess.Popen('./program', stdin=subprocess.PIPE)
proc.communicate(str(x))
if proc.returncode:
continue
print "Found the password: " + str(x)
break
Сработало отлично. Мне пришлось добавить shell=True к Popen, потому что он выдавал какие-то странные ошибки. Спасибо! :)
Ваш скрипт python должен записывать на STDIN
./program. Это может помочь: stackoverflow.com/questions/37560427/…. Или проведите дальнейшее исследование той же концепции. Я не отмечал это как дубликат, так как он может не полностью отвечать вашим требованиям.