【问题标题】:Is there a way to store spawn object (child_process) in database and reuse it?有没有办法将生成对象(child_process)存储在数据库中并重用它?
【发布时间】:2020-12-08 19:34:36
【问题描述】:

为什么我需要这个?

  1. 客户端向服务器发出请求
  2. 服务器接收请求,使用 spawn (child_process) 启动 python 脚本
  3. 如果 python 脚本需要更多信息才能继续运行,我必须发送带有链接的用户电子邮件,该链接指向只有一个输入字段的页面
  4. 当用户填写时,我必须继续相同的进程(运行脚本)并在命令行中输入 ls = spawn('command', args) 然后 ls.stdin.write()

我该怎么做?我的想法是,从

获取对象
const { spawn } = require('child_process');

const ls = spawn('command', [args]);
insertInDb(JSON.stringify(ls));

然后和它一起使用

const ls = JSON.parse(databaseInput);

ls.stdin.write(input);

但它不起作用。

【问题讨论】:

    标签: node.js child-process spawn


    【解决方案1】:

    不,但我无法想象您想要的场景。如果您的用户明天回邮件怎么办?还是下周?还是从不?你只是让这些悬空的 python 进程阻塞了你的系统。

    如果你是肯定的,你会得到快速反馈,你可以通过共享文件描述符来讨论你的 python 脚本:

    const cp = spawn(cmd,args,{
      stdio:['pipe','pipe','pipe','pipe']
    });
    cp.stdio[3].on('data',(data)=>{
      // data from python's fd 3
    });
    cp.stdio[3].write('foobar'); // write to python's fd 3
    

    但你几乎可以肯定应该只有两个不同的 python 脚本。

    【讨论】:

    • 这是第三方脚本,做了一些抓取,有时需要用户必须输入的附加信息。它不应持续超过 5 分钟
    • 这不是一个好的解决方案。您应该在运行或拆分之前验证是否存在必要的信息。即使它是第三方,它仍然是您可以轻松更改的脚本。怎么样:找到你的分割点并用 JSON 写出变量。将其存储在您的服务器中,必要时修复 var,将 var 作为 env 变量或 argv 值运行后半部分。
    • 所以不可能像spawn的字符串对象一样存储?
    • 好吧,只要有一些创造力和对你所追求的东西的深刻理解,几乎没有什么是不可能的,但你不应该这样做。
    • 或者我可以在现有的 pid 上发送标准输入吗?仅存储 pid
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2021-11-08
    • 1970-01-01
    相关资源
    最近更新 更多