内存中的GraphViz渲染显示在标准输出上

内存中的GraphViz渲染显示在标准输出上,graphviz,Graphviz,我通过JNI从Java调用GraphViz来布局图。当我从GraphViz的库gvc调用函数gvRenderData时,它将图形布局呈现为malloc'ed atring(而不是执行文件I/O),不幸的是,我还看到了控制台上显示的呈现图形。所以实际上gvRenderData似乎也在向stdout写入数据。对于具有数千个节点的图来说,这是一个真正的麻烦。我曾尝试将类似-o/dev/null的参数传递到GraphViz上下文中,但没有效果 有人知道如何关闭这种不想要的行为吗?我在Linux下使用Gr

我通过JNI从Java调用GraphViz来布局图。当我从GraphViz的库gvc调用函数gvRenderData时,它将图形布局呈现为malloc'ed atring(而不是执行文件I/O),不幸的是,我还看到了控制台上显示的呈现图形。所以实际上gvRenderData似乎也在向stdout写入数据。对于具有数千个节点的图来说,这是一个真正的麻烦。我曾尝试将类似
-o/dev/null
的参数传递到GraphViz上下文中,但没有效果

有人知道如何关闭这种不想要的行为吗?我在Linux下使用GraphViz 2.40.1

下面是我的代码的基础。这并不奇怪。本机接口已使用SWIG生成

SWIGTYPE_p_GVC_t gvCtx = gvc.gvContext();
String[] argv = {"dot", "-y", "-q"};
gvc.gvParseArgs(gvCtx, argv.length, argv);
SWIGTYPE_p_graph_t graph = cgraph.agmemread(dot);
gvc.gvLayout(gvCtx, graph, "dot");
String[] rendered = new String[1];
gvc.gvRenderData(gvCtx, graph, "json", rendered, new long[1]);

你能显示你用来渲染图形的代码吗?@Botje编辑了我的问题来显示代码。我想这不会有多大帮助,这是一系列来自Java的本机方法调用,这完全不令人惊讶。在幕后,
gvparges
设置了一个使用默认设置运行的作业(即输出到stdout)。如果我说一切都如你所料。要反转Y轴,您需要声明一个
extern int Y_invert并将其设置为1。@Botje感谢您找到这个答案。事实上,当我省略对
gvParseArgs
的调用时,不需要的输出消失了。但是,关于您建议如何指定y轴反转而不调用
gvParseArgs
,我一定是误解了。我确实试着在我的SWIG接口文件中放入以下内容,并在代码中调用
invertY
,但没有效果:
%{extern int Y_invert;%}%inline%{void invertY(){Y_invertY=1;}}}%}
,听起来它应该可以工作。。。从我可以收集到的信息来看,反转逻辑继承自您使用的任何渲染器(
json
不反转)、变量
Y\u invert
或GVC作业对象中的标志
gvRenderData
为您创建作业,因此此
Y_invert
似乎是唯一可行的方法。如果无法使其与全局变量一起工作,则应提出后续问题。