Python Popen错误:[Errno 2]没有这样的文件或目录:';迷你卫星';:';迷你卫星';
我试图在我的程序生成的一堆cnf编码上运行SAT解算器。我已经通过自制在笔记本电脑(MacOS)上安装了minisat,我可以在终端上运行minisat,如下所示:Python Popen错误:[Errno 2]没有这样的文件或目录:';迷你卫星';:';迷你卫星';,python,subprocess,popen,sat,sat-solvers,Python,Subprocess,Popen,Sat,Sat Solvers,我试图在我的程序生成的一堆cnf编码上运行SAT解算器。我已经通过自制在笔记本电脑(MacOS)上安装了minisat,我可以在终端上运行minisat,如下所示: $miniat INPUT_FILE.cnf OUTPUT_FILE.txt 但是因为我有数百种编码方式,所以我使用子进程编写了一个自定义命令。编码在for循环中生成。循环还包含子流程命令,理想情况下,SAT解算器(minisat)在每个循环的每个文件上运行 cnf编码生成得很好,我可以在终端上单独运行它们,但当我尝试运行use T
$miniat INPUT_FILE.cnf OUTPUT_FILE.txt
但是因为我有数百种编码方式,所以我使用子进程
编写了一个自定义命令。编码在for
循环中生成。循环还包含子流程命令,理想情况下,SAT解算器(minisat)在每个循环的每个文件上运行
cnf编码生成得很好,我可以在终端上单独运行它们,但当我尝试运行use The subprocess命令时,它会抛出一个错误,说明:
FileNotFoundError:[Errno 2]没有这样的文件或目录:“miniat”:“miniat”
这是我的代码(它只是我代码的一部分,我省略了不相关的部分):
solver='miniat'
因为我在射程内
编码=生成_编码()
cnf='生成的cnf编码'+str(i)+'.cnf'
#将编码写入cnf
...
sol='空输出文件'+str(i)+'.txt'
cmd=[solver,cnf,sol]
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
输出,err=p.communicate()
打印(错误)
编辑:在这里提到的其他几种解决方案中,建议添加
shell=True
,但在打印err时抛出miniat:command not found
,请运行以下代码,查看它是否至少运行一次miniat命令。然后将输出粘贴到这里
import subprocess
result = subprocess.run(['minisat', INPUT_FILE.cnf OUTPUT_FILE.txt], stdout=subprocess.PIPE)
print(result.stdout)
我得到了与前面相同的错误,即FileNotFoundError:[Errno 2]没有这样的文件或目录:“miniat”:“miniat”
这意味着系统Python子进程找不到miniat。确保它在路径中。导出PATH=/usr/local/bin:/usr/local/sbin:~/bin:$PATH
然后导出源文件~/.bash\u配置文件
或检查安装minisat的文件夹。如果问题仍然存在,请尝试导入os
和os.PATH.expandvars($PATH”)