2016-10-03 126 views
0

当前我正在研究node.js中的自动docx2pdf转换器。我正在使用unoconv。 当我运行shell命令中工作得很好:node.js child_process does not working

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

但我想打电话从node.js的这个命令,也有一些模块(unoconv包装),但没有这个工作对我来说。所以我只想从上面调用这个命令。我尝试了所有来自node.js shell command execution的解决方案,但他们不工作。
为什么此代码片段doesent对我有用?

     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作为服务或直接使用节点命令运行脚本,它也不会产生输出。我希望你可以帮助我! 在此先感谢

+0

我建议你也听'child.stderr.on( “数据” ......'和'child.on( “接近” ...'来看看你 – Hampus

+0

@Hampus好的,谢谢我有一个新的错误:致命的Python错误:Py_Initialize:无法获取tImportError:没有名为'encodings'的模块,但为什么只有在从节点调用命令时才出现而不是从命令行? – t333o

+0

尝试使用'python --version'打印在命令行上运行的哪个版本的python,然后从节点内执行相同的操作。 – Hampus

回答

0

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

像这样:

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

+0

我试过国旗,但没有改变任何东西。仍然是致命的Python错误 – t333o