Popen 错误: [errno 2] 没有这样的文件或目录: 'minisat': 'minisat'



我正在尝试在我的程序生成的一堆 cnf 编码上运行 SAT 求解器。我已经通过自制软件在我的笔记本电脑(MacOS(上安装了minisat,我可以在终端上运行minisat,如下所示:

$ minisat INPUT_FILE.cnf OUTPUT_FILE.txt

但是因为我有数百种编码,所以我使用 subprocess 编写了一个自定义命令。编码在for循环中生成。该循环还包含子流程命令,理想情况下,SAT 求解器 (minisat( 在每个循环中在每个文件上运行。

cnf 编码生成得很好,我可以在终端上单独运行它们,但是当我尝试运行使用子进程命令时,它会抛出一条错误消息:

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

请运行以下代码以查看它是否至少运行一次 minisat 命令。并将输出粘贴到此处。

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

相关内容

  • 没有找到相关文章

最新更新