возврат подпроцесса Нет, что это значит для моего фаззера - PullRequest
0 голосов
/ 09 января 2020

Для школы я должен сделать фаззер, я использую Чарльза Миллера, чтобы записать файлы PDF. Я хочу проверить количество ошибок приложения. Когда я делаю

result = process.communicate()
    print(result)

, он печатает (Нет, Нет) несколько раз, что это значит?

1 Ответ

0 голосов
/ 09 января 2020

Это означает, что при создании объекта subprocess.Popen вы не указали stdout=PIPE или stderr=PIPE.

Popen. communicate ( input = None, timeout = Нет )

Взаимодействовать с процессом: отправлять данные в stdin. Чтение данных из stdout и stderr [...]

communicate() возвращает кортеж (stdout_data, stderr_data). [...]

Обратите внимание, что если вы хотите отправить данные в стандартный поток процесса, вам необходимо создать объект Popen с stdin=PIPE. Точно так же, , чтобы получить что-то отличное от None в результирующем кортеже, вам нужно дать stdout=PIPE и / или stderr=PIPE [emph. добавлено] тоже.

- подпроцесс - Управление подпроцессами - Python 3 Документация

Например:

import subprocess
apples_only = subprocess.Popen(
    ["grep", "apple"], 
    stdin=subprocess.PIPE, 
    stdout=subprocess.PIPE,
)
out, err = apples_only.communicate(b"pear\napple\nbanana\n")

print((out, err))
# (b'apple\n', None)  # did not say stderr=PIPE so it's None.
...