Всплывающая ошибка: [Errno 2] Нет такого файла или каталога: 'minisat': 'minisat' - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь запустить 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

1 Ответ

0 голосов
/ 25 апреля 2019

Пожалуйста, запустите следующий код, чтобы увидеть, запускает ли он команду minisat хотя бы один раз. И вставьте вывод здесь.

import subprocess
result = subprocess.run(['minisat', INPUT_FILE.cnf OUTPUT_FILE.txt], stdout=subprocess.PIPE)
print(result.stdout)
...