Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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子进程从标准输出?_Python_Python 3.x_Prolog_Subprocess_Swi Prolog - Fatal编程技术网

如何使用python子进程从标准输出?

如何使用python子进程从标准输出?,python,python-3.x,prolog,subprocess,swi-prolog,Python,Python 3.x,Prolog,Subprocess,Swi Prolog,我试图使用python的(3.8)子进程库与swipl(Prolog解释器)通信。(我正在使用MAC OSx) 有关Prolog的更多信息: 在线Prolog解释器: 我希望能够将大量事实和规则加载到知识库中。另外,我希望能够在口译员中提出多个问题,然后得到答案 我已经尝试过通信功能,但它不能满足多次发送和接收数据的要求,因为第一次呼叫后通信线路关闭 现在,当我运行这个程序时,我认为它是在写时加载的,然后当它到达stdout.read()时,它运行该行,然后停止运行。我不确定到底发生了什么,我如

我试图使用python的(3.8)子进程库与swipl(Prolog解释器)通信。(我正在使用MAC OSx)

有关Prolog的更多信息:

在线Prolog解释器:

我希望能够将大量事实和规则加载到知识库中。另外,我希望能够在口译员中提出多个问题,然后得到答案

我已经尝试过通信功能,但它不能满足多次发送和接收数据的要求,因为第一次呼叫后通信线路关闭

现在,当我运行这个程序时,我认为它是在写时加载的,然后当它到达stdout.read()时,它运行该行,然后停止运行。我不确定到底发生了什么,我如何才能得到通话的输出

导入操作系统
输入信号
导入子流程
#注意:stderr=subprocess.PIPE使终端中的swipl引入消失
p=subprocess.Popen('swipl',stdin=subprocess.PIPE,stdout=subprocess.PIPE,text=True,universal\u newlines=True)
#communicate()方法返回一个元组(stdoutdata,stderrdata)。
p、 标准写入('assert(汽车(本田18000,红色))。)
p、 标准写入(‘断言(汽车(丰田,18000,白色))。)
p、 标准写入(‘断言(汽车(福特,25000,红色))。)
p、 标准写入('assert(汽车(acura,50000,白色))。)
p、 标准写入('断言(汽车(宝马,60000,红色))。)
p、 stdin.write('[user].recommendcar(年龄,汽车):-Age=<25,汽车(汽车,成本,红色),成本=<30000.)
p、 书写标准('recommendcar(20,X.))
输出=p.stdout.read()
打印(输出)
p、 杀死
试试:

p.stdin.write('assertz(汽车(本田,18000,红色))。)
p、 书写标准('assertz(汽车(丰田,18000,白色))。)
p、 书写标准('assertz(汽车(福特,25000,红色))。)
p、 书写标准('assertz(汽车(acura,50000,白色))。)
p、 书写标准('assertz(汽车(宝马,60000,红色))。)
p、 标准写入('assertz((推荐汽车(年龄,汽车):-Age=<25,汽车(汽车,成本,红色),成本=<30000))。)
p、 书写标准('recommendcar(20,X.))

您可能已经找到了这个,但以防万一:一个Python-SWI Prolog桥。谢谢Paul!我最初使用的是它,但是我在设置它时有很多错误。所以我的老师建议我用这个
p.stdin.write('assertz(car(honda, 18000, red)).')
p.stdin.write('assertz(car(toyota, 18000, white)).')
p.stdin.write('assertz(car(ford, 25000, red)).')
p.stdin.write('assertz(car(acura, 50000, white)).')
p.stdin.write('assertz(car(bmw, 60000, red)).')
p.stdin.write('assertz((recommendcar(Age, Car) :- Age =< 25, car(Car, Cost, red), Cost =< 30000)).')
p.stdin.write('recommendcar(20, X).')