作为持久子进程运行并调用Python程序
我正在用Haskell编写一个微服务,似乎我们需要调用Python库。我知道如何从Haskell创建和配置一个进程来实现这一点,但我的Python已经过时了。以下是我试图实现的逻辑:作为持久子进程运行并调用Python程序,python,haskell,subprocess,Python,Haskell,Subprocess,我正在用Haskell编写一个微服务,似乎我们需要调用Python库。我知道如何从Haskell创建和配置一个进程来实现这一点,但我的Python已经过时了。以下是我试图实现的逻辑: Haskell应用程序通过创建一个持久子进程(子进程的生命周期=父进程的生命周期)来初始化,该持久子进程运行一个为Python库服务的最小化应用程序 Haskell应用程序接收一个网络请求,并通过stdin向Python子进程发送恰好1个数据块(即bytestring或text);它等待——阻塞——从子进程的std
——来自Haskell父进程
{-#语言重载字符串}
导入系统.IO
导入System.Process.Type
configProc::ProcessConfig句柄()
configProc=
setStdin createPipe$
setStdout创建管道$
设置错误关闭$
setWorkingDir“/工作/目录”$
shell“python3 my_program.py”
startPyProc::IO(进程句柄())
startPyProc=do
p只需将print(…)
替换为print(…,flush=True)
即可修复。在Python中,似乎stdin/stdout默认为块缓冲,这使得我调用了hGetLine
block,因为它需要行。为什么你认为它会立即死锁?事实上,你的另一个程序是用Python编写的,这与此无关。它会在我的测试中死锁,但是我想把问题集中在方法上——希望有一些例子——这是建议满足我详细描述的规范的方法。你必须用Python和Haskell创建最少的工作代码,这样我们才能测试它。我不知道任何Python,但我打赌sys.stdin中的line.stdin
正在等待一行写入stdin。