Непрерывное чтение из подпроцесса. Открыть
Я очень плохо знаком с Python (например, Noob:D).
У меня есть вопрос о функции subprocess.Popen, моя проблема в том, что я не могу разобраться с непрерывным чтением потока stdout. Когда я использую connect () в конце своей функции, я получаю желаемый результат. Но у меня есть две проблемы здесь. Во-первых, connect () буферизирует весь вывод перед тем, как что-либо печатать, и было бы неплохо получить непрерывный вывод. Во-вторых, я прочитал документацию о connect (), которая не предназначена для больших потоков данных, как в моем сценарии.
#!/usr/bin/python
import os
import sys
from subprocess import *
import itertools
def combinate(hash_mode,hash_file,directory):
erg = Popen(['hashcat', '-a', '0', '-m', hash_mode, hash_file, '-O', '--potfile-disable'],
stdin=PIPE,
stdout=PIPE,
stderr=PIPE,
universal_newlines=True)
file = []
with os.scandir(directory) as listOfEntries:
for entry in listOfEntries:
if entry.is_file() and entry.name is not ".DS_Store":
file.append(open(directory+entry.name).readlines())
file = list(itertools.permutations(file))
for b in range(0, len(file)):
for i in itertools.product(*file[b]):
test = '\n'.join(i).replace("\n", "")
erg.stdin.writelines(test+'\n')
print(erg.communicate()[0])
Это мой вывод с общаться:
Session..........: hashcat
Status...........: Cracked
Hash.Type........: SHA-512
Hash.Target......: 7ba4e9da57a7d3bd8b1b43c0b028a96d77721f6b33e3b85f0b2...298b56
Time.Started.....: Sat Feb 24 03:52:05 2018 (0 secs)
Time.Estimated...: Sat Feb 24 03:52:05 2018 (0 secs)
Guess.Base.......: Pipe
Speed.Dev.#2.....: 969.7 kH/s (0.13ms)
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 384
Rejected.........: 0
Restore.Point....: 0
Candidates.#2....: telefon1telefon3telefon2 -> tasse2tasse3tasse1
И это мой вывод с циклом for с stdout.readline:
Session..........: hashcat
Status...........: Running
Hash.Type........: SHA-512
Hash.Target......: 7ba4e9da57a7d3bd8b1b43c0b028a96d77721f6b33e3b85f0b2...298b56
Time.Started.....: Sat Feb 24 04:14:30 2018 (10 secs)
Time.Estimated...: Sat Feb 24 04:14:40 2018 (0 secs)
Guess.Base.......: Pipe
Speed.Dev.#2.....: 0 H/s (0.00ms)
Recovered........: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts
Progress.........: 0
Rejected.........: 0
Restore.Point....: 0
Candidates.#2....: [Copying]
Как вы видите, я получаю вывод, но процесс hashcat не получает мой поток stdin или не обрабатывает его, и я не знаю почему.
Кто-нибудь знает, как я могу реализовать непрерывный вывод с моим кодом? Спасибо за вашу помощь:)
1 ответ
Ответ от JohanL в комментариях был моим решением. Большое спасибо за это.
Вы должны рассмотреть возможность использования потоков и запускать stdout и stdin в отдельных потоках, как, например, в моем ответе здесь: stackru.com/a/48777349/7738328 - JohanL