如何在python中进行fork或非阻塞系统调用

2024-09-28 21:36:51 发布

您现在位置:Python中文网/ 问答频道 /正文

这与this question有关,但有不同的结论。

在Ubuntu中,我使用Autokey,它使用python自动执行它观察到的击键操作。因此,我有<super>+e映射到open Gedit,有<shift>+<super>+3映射到open OOwriter,等等。当我进行这些调用之一时,在上一个调用的程序退出之前,我无法进行另一个调用。

下面是它执行的脚本示例:

import subprocess
subprocess.call("/opt/openoffice.org3/program/scalc")

。。。相同的行为使用:

import os
os.system("/opt/openoffice.org3/program/scalc")

这一切在我之前的Ubuntu10.04LTS中都很顺利,但从那以后情况就发生了变化,我无法重复这些调用。

请您帮助我如何在不等待程序退出的情况下从子进程call()派生或执行“返回”操作?我试过nohup和backgrounding /opt/openoffice.org3/program/scalc &但它们什么也不做(可能会破坏Autokey和Py中的某些内容)


回答:下面的答案实际上不起作用,但让我四处窥探,我发现另一个SO answer确实对我的情况起作用!

#Enter script code -- mapped to <super>+e
import thread
thread.start_new_thread(os.system,('gedit',))

这完全奏效了!!我可以连续点击<super>+e2或3次,它一直在gedit中添加制表符。:)此脚本使Autokey的作用类似于在命令行键入引号中的命令。


Tags: import程序脚本os情况openprogramthread
1条回答
网友
1楼 · 发布于 2024-09-28 21:36:51

使用Popen而不是call一样简单:

import subprocess
subprocess.Popen("/opt/openoffice.org3/program/scalc")

call不应该这样工作,因为它必须返回退出代码,这意味着程序实际上必须退出。

相关问题 更多 >