Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Popen错误:[Errno 2]没有这样的文件或目录:';迷你卫星';:';迷你卫星';_Python_Subprocess_Popen_Sat_Sat Solvers - Fatal编程技术网

Python Popen错误:[Errno 2]没有这样的文件或目录:';迷你卫星';:';迷你卫星';

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

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

$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”)