我尝试使用 pexpect(甚至直接使用 subprocess.Popen())通过命令行启动服务器应用程序(在 erlang 中,打开端口并侦听 http 请求)。
该应用程序启动正常,日志(通过pexpect)到屏幕正常,我也可以通过命令行与之交互......
问题是服务器不会监听传入的请求。当我通过在命令行中键入命令手动启动它时,该应用程序会进行侦听。使用 subprocess/pexpect 会阻止应用程序以某种方式侦听...
当我手动启动它时,“netstat -tlp”将应用程序显示为正在侦听,当我通过 python (subprocess/pexpect) 启动它时,netstat 不会注册应用程序...
我有一种感觉,它与环境、python 分叉事物的方式等有关。有什么想法吗?
谢谢你
基本示例:注意:
“-pz” - 仅将 ./ebin 广告到 erl VM 的模块路径,库搜索路径
“-run” - 运行 moduleName,不带任何参数。
command_str = "erl -pz ./ebin -run moduleName"
child = pexpect.spawn(command_str)
child.interact() # Give control of the child to the user
所有这些东西都能正常工作,这很奇怪。我已经在我的代码中登录,并且所有日志消息都按应有的方式输出。即使我通过 bash 脚本启动它的进程,服务器也不会听,所以我不认为它是导致它的 python 代码(这就是为什么我觉得它与新操作系统进程的启动方式有关)。