pexpectを使用してコマンドラインから(またはsubprocess.Popen()を直接使用して)サーバーアプリを起動しようとしています(erlangでは、ポートを開き、httpリクエストをリッスンします)。
アプリは正常に起動し、(pexpect を介して) 画面に正常にログを記録します。コマンド ラインからも操作できます...
問題は、サーバーが着信要求をリッスンしないことです。コマンドラインにコマンドを入力して手動で起動すると、アプリはリッスンします。サブプロセス/pexpectを使用すると、アプリが何らかの形でリッスンしなくなります...
手動で起動すると、「netstat -tlp」でアプリがリッスンしていると表示されます.python(サブプロセス/ 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コードではないと思います(そのため、新しいOSプロセスの開始方法に関する何かがあると感じています)。