Я пытался выполнить две команды cmd с использованием подпроцесса python, но застрял в оптимизации кода и передаче выходного файла в качестве ввода в cmd. Мои две команды выглядят так, как показано ниже
amass enum -d example.com
subfinder -d example.com -o outputfile.txt (where -o flag writes output in txt file)
В идеале я хочу записать накопленный выводк файлу и затем добавить вывод подфинджера в тот же файл. Для этого я пишу ниже код
import subprocess
def gathersubdomain(domainname):
subdomainoutputs = open('amassoutput.txt','a')
processlogs=open('processlogs.txt','a')
amassscmd=[
'amass','enum','-d',domainname
]
subfindercmd=[
'subfinder','-d',domainname,'-o',subdomainoutputs
]
process1 = subprocess.Popen(amassscmd,stdout=subdomainoutputs,stderr=processlogs)
process2 = subprocess.Popen(subfindercmd,stdout=subprocess.PIPE,stderr=processlogs)
output=process2.stdout.read
return process1.wait()
gathersubdomain('example.com');
При запуске выше кода я получаю ниже ошибка
Traceback (most recent call last):
File "subdomainenumeration.py", line 22, in <module>
gathersubdomain('haufe.io');
File "subdomainenumeration.py", line 16, in gathersubdomain
process2 = subprocess.Popen(subfindercmd,stdout=subprocess.PIPE,stderr=processlogs)
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
TypeError: execv() arg 2 must contain only strings
Что я делаю здесь неправильно? и могу ли я сделать что-то лучше, чем позвонить process1.wait()
. Я заметил, что это займет гораздо больше времени, чем я ожидал.