我有一个正在生成输出的前端系统。我正在使用瓶子发布请求来访问此数据(JSON)。我的帖子没有问题就收到了json。我需要执行一个后端python程序(blender automation)并将这个JSON数据传递给该程序。
blender,script和json都是绝对文件路径的字符串对象
sub = subprocess.Popen([blender + " -b -P " + script + " -- " + json], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
我需要一个能够在自己的流程中从瓶子服务器运行的解决方案。它将处理多个请求,因此子进程无法在服务器中阻塞。被调用的进程是完全自动化的,只需要在执行命令中发送JSON数据。子进程程序的结果将是在服务器上创建的文件的字符串路径。
从我的测试驱动程序调用时,上面的子进程工作得很好。我只需要将执行连接到web服务,这样我的前端就可以触发它的执行。
我的瓶贴方法 - 在没有问题的情况下打印json。
@post('/getData')
def getData():
json_text = request.json
print(json_text)
我不知道从哪里开始。从我到目前为止所读到的,子进程应该工作。任何帮助或建议将非常感谢。如果需要其他信息,请告诉我。我将编辑更多细节。谢谢。
相关资料: 操作系统:Ubuntu 16.04 LTS, Python 3.x
这不是一个优雅的解决方案,但我的子进程调用现在可以正常工作。
cmd = blender
cmd += " -b -P "
cmd += script
cmd += " -- "
cmd += str(json)
sub = subprocess.Popen([cmd], shell=True)
似乎通过设置shell = True并删除stdout,stderr = PIPE允许我看到输出我抛出未处理的异常,因为我的json数据是一个列表而不是字符串。
答案 0 :(得分:1)
当使用python执行脚本时,Popen.subprocess创建的进程将无意中继承并保持打开文件描述符。
您需要关闭它,以便该过程可以独立运行。的(close_fds = TRUE)强>
Stored Connection : Local instanse Mysql57
Connectiton Method : Standart TCP/IP
Alsso,你不必使用shell来创建另一个进程。它可能有意外consequences。
我有完全相同的问题,瓶子没有返回/挂起。它现在有效。