os.system方法是os模块最基础的方法。我在封装软件的时候,想要实现打开文件的功能,就是使用一个命令来实现鼠标双击的效果。一开始我在网上寻找,知道使用os.system可以实现这样的效果。但是发现一个问题,就是打开之后PyQt的界面会卡顿。

为什么使用os.system()会卡顿呢?

在某些情况下,system()调用会卡住线程,导致程序运行阻塞。

程序卡住

system相当于是先后调用了fork, exec,waitpid来执行外部命令

system本身就是阻塞的。

如何解决os.system()阻塞?

尽量不要使用system()函数,用popen()函数替代。根据网上其他人的说法,popen()返回值的判断要比system()简单。我使用popen()函数替代掉system()后,瞬间丝滑多了。

popen相当于是先创建一个管道,然后fork,关闭管道的一端,执行exec,返回一个标准的io文件指针。

popen本身是不阻塞的,要通过标准io的读取(fread等)使它阻塞; //如果用fread读文件,不会阻塞,如果用来读管道、socket连接等,则可能会阻塞。

使用os.popen


版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/ospopen.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!
▶ 站长邮箱 [email protected][email protected] ,如不方便留言可邮件联系。

最后修改:2022 年 09 月 28 日
如果觉得我的文章对你有用,请随意赞赏