据我了解,phantomjs控制台是异步的。这意味着此代码将显示损坏的输出:
console.log(very_long_text);
phantom.exit(0);
只有部分very_long_text
可见。由于console.log()
的异步性质,它的结尾将会丢失。
解决方法是什么?我需要查看整个very_long_text
。
也许这个讨论是相关的:is node.js' console.log asynchronous?
PS。这是我现在能做的最好的事情,但它非常难看:
console.log(very_long_text);
setTimeout(function() { phantom.exit(0); }, 100);
答案 0 :(得分:2)
您确定console.log
异步运行吗?
我可以在没有任何截断的情况下向控制台写入5MB。您可以使用系统模块尝试另一个重载,如下例所示:
require('system').stdout.write(very_long_text);
phantom.exit(0);
因此console.log
是同步的,但可以在异步代码内运行(例如回调)。因此,在使用它时必须非常小心,尤其是位于phantom.exit
的位置。
当你使用console.log
时,我认为某事会产生一个phantomjs实例。像Node.js这样的技术在内部使用行/内存缓冲区:因此,如果您的进程突然结束(未处理的异常),则缓冲输出完全有可能永远不会到达屏幕;如果超出stdout或stderr上允许的数据量,也可以杀死子进程(maxBuffer here)
最后,如果您想要撰写大量内容,console.log
可能不是最佳解决方案。