【问题标题】:node.js child_process doesnt worknode.js child_process 不起作用
【发布时间】:2017-02-11 06:48:35
【问题描述】:

目前我正在 node.js 中开发一个自动 docx2pdf 转换器。我正在使用 unoconv。 当我在 shell 中运行这个命令时效果很好:

unoconv -f pdf "/opt/bitnami/apache2/htdocs/123.docx"

但我想从 node.js 调用这个命令,有一些模块(unoconv 包装器),但这些都不适合我。所以我只想从上面调用这个命令。我尝试了node.js shell command execution 的所有解决方案,但它们不起作用。
为什么这段代码 sn-p 对我不起作用?

                        function run_cmd(cmd, args, callBack) {
                        var spawn = require('child_process').spawn;
                        var child = spawn(cmd, args);
                        var resp = "";

                        child.stdout.on('data', function(buffer) {
                            resp += buffer.toString()
                        });
                        child.stdout.on('end', function() {
                            callBack(resp)
                        });
                    } // ()
                    run_cmd("unoconv", ['-f pdf "/opt/bitnami/apache2/htdocs/123.docx"'], function(text) {
                        console.log(text)
                    });

即使我从 pm2 作为服务或直接使用 node 命令运行脚本,它也不会产生输出。我希望你可以帮助我! 提前致谢

【问题讨论】:

  • 我建议你也听听child.stderr.on("data"...child.on("close"... 看看你是否能找到任何可能出错的线索。
  • @Hampus 好的,谢谢我有一个新的错误:致命的 Python 错误:Py_Initialize: Unable to get tImportError: No module named 'encodings'。但是为什么只有从节点而不是命令行调用命令时才会出现这种情况?
  • 尝试使用python --version在命令行上打印您运行的python版本,然后在节点内执行相同操作。
  • @Hampus python-version commandline: 2.7.11 以及来自节点的 Python 2.7.11。 - 与 python3 相同 ||你有别的想法吗?
  • 我猜,但是从节点的上下文中使用 python 路径时可能存在问题,因此它找不到编码模块。

标签: node.js exec pm2


【解决方案1】:

我怀疑您使用的命令只会与 DOCX 一起创建一个新的 PDF 文件。如果您想在节点中使用它,您可能应该尝试--stdout 标志。

像这样:

unoconv -f pdf --stdout "/opt/bitnami/apache2/htdocs/123.docx"

【讨论】:

  • 我尝试了这个标志,但没有改变任何东西。仍然是致命的 Python 错误
猜你喜欢
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 2016-01-02
  • 2016-07-15
  • 2014-07-01
  • 2017-08-31
  • 2013-05-21
  • 1970-01-01
相关资源
最近更新 更多