【发布时间】: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 路径时可能存在问题,因此它找不到编码模块。