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

时间:2019-04-25 11:45:35

标签: python subprocess popen sat sat-solvers

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

$ minisat INPUT_FILE.cnf OUTPUT_FILE.txt

但是因为我有数百种编码,所以我使用subprocess编写了一个自定义命令。编码在for循环内生成。该循环还包含subprocess命令,理想情况下,每个循环在每个文件上都运行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 :(得分:0)

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

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