微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 Qt 应用程序运行命令行 dot 程序没有输出,这是什么问题?

如何解决从 Qt 应用程序运行命令行 dot 程序没有输出,这是什么问题?

我有一个应用程序可以生成一个 dependencies.dot 文件,然后我想将其转换为 SVG 图像。

当我从一个简单的应用程序中这样做时:

int main(int argc,char * argv[])
{
    system("dot -Tsvg ../BUILD/dependencies.dot > ../BUILD/dependencies.svg");

    return 0;
}

效果很好。 SVG 图像存在并且可以正常工作。

当我从 Qt 应用程序运行它时,SVG 文件被创建,但它仍然是空的。

知道什么会阻止 dot 将数据输出到它的 stdout 吗?

为了以防万一,我还尝试使用 cat 通过 stdin 而不是文件名发送输入:

system("cat ../BUILD/dependencies.dot | dot -Tsvg > ../BUILD/dependencies.svg");

这没有任何区别。

同样使用完整路径 (/usr/bin/dot) 也无济于事。

一个测试,我尝试使用 popen() 并且第一个 fread() 立即返回 0(即 EOF 的标记)。

它可能不是 Qt,但某些东西正在与 dot 做任何事情的能力相互作用。关于为什么会很棒的任何指示。

也许是一个重要的笔记?我启动我的应用程序。从控制台,所以 stdinstdoutstderr 都应该按预期工作。我实际上可以看到调试日志出现在那里,其他应用程序似乎按预期工作(例如,我的 Qt 应用程序可以成功运行 make)。

以下是生成的 SVG 示例(当我不在 Qt 应用程序中运行它时):

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。