Я пытаюсь запустить SAT-решатель для нескольких кодировок cnf, сгенерированных моей программой. Я установил Minisat на свой ноутбук (MacOS) с помощью homebrew, и я могу просто запустить Minisat на терминале как:
$ minisat INPUT_FILE.cnf OUTPUT_FILE.txt
Но поскольку у меня есть сотни кодировок, я написал собственную команду, используя subprocess
. Кодировка генерируется внутри цикла for
. Цикл также содержит команду подпроцесса, и в идеале решатель SAT (minisat) запускается для каждого файла в каждом цикле.
Кодировка cnf генерируется нормально, и я могу запускать их по отдельности на терминале, но когда я пытаюсь запустить команду use subprocess, выдается сообщение об ошибке:
FileNotFoundError: [Errno 2] No such file or directory: 'minisat': 'minisat'
Вот мой код (это только часть моего кода, и я пропустил несущественные части):
solver = 'minisat'
for i in range...:
encoding = generate_encoding()
cnf = 'generated_cnf_encoding'+ str(i) +'.cnf'
#write encoding to cnf
...
sol = 'empty_output_file'+ str(i) +'.txt'
cmd = [solver, cnf, sol]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = p.communicate()
print(err)
РЕДАКТИРОВАТЬ: На некоторых других решениях, упомянутых здесь, было предложено добавить shell=True
, но это бросает minisat: command not found
при печати err