首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl:等待xdg-open退出,然后继续

Perl:等待xdg-open退出,然后继续
EN

Stack Overflow用户
提问于 2017-10-13 19:01:55
回答 1查看 880关注 0票数 5

我有一个Perl脚本,它在临时目录$tempdir中生成一个pdf $tempdir,并使用xdg-open打开它。然后,当用户查看完文件后,脚本应该删除该工作目录。下面是我遇到麻烦的部分代码:

代码语言:javascript
复制
system "xdg-open $pdffile";
remove_tree($tempdir);

我对system的理解是,它应该等到命令返回后才能继续执行程序。但是,当我执行这段代码时,我会收到一条消息“未能打开/tmp/ not 14969/Diffs.pdf”。如果我在xdg-open命令中将okular替换为okular(这是我的系统默认值),它将按我的意愿工作。(类似地,如果我对生活在系统上的任何pdf查看器进行硬编码,它也能工作,但出于可移植性的原因,我不想这样做。)

我的猜测是,xdg-open正在一个新的进程中启动查看器,而system命令只等待xdg-open完成。一旦xdg-open成功返回,脚本将在查看器打开文件之前删除临时目录。如何让脚本等待实际的查看器完成呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-14 23:40:35

根据您使用的桌面环境,xdg-open使用不同的方式打开文件。它实际上并不是“启动查看器”,而是要求(至少在Gnome中)桌面环境打开您的文件(例如,在Gnome中使用gio,然后使用dbus)。

因此,除了做一些不可移植的诡计之外,没有简单的方法可以知道查看器的PID值来等待退出。

一个解决方案可以是使用模块File::Temp (包括在perl发行版中),并使用UNLINK /清除标志创建临时文件/目录,当保存对象的变量超出作用域时,该标记会使其被删除(因此调用破坏方法)。这样,只要脚本运行(并且变量没有超出作用域),临时文件就可以在文件系统中访问。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46736478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档