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

Chr*_*s K 3 python ubuntu-12.04 autokey

这与这个问题有关,但有不同的看法.

在Ubuntu中,我使用Autokey,它使用python自动化它观察到的击键.所以我已经<super>+e映射到打开<shift>+<super>+3Gedit,打开OOwriter等等.当我进行其中一个调用时,我不能再创建另一个调用,直到上一个调用的程序退出.

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

import subprocess
subprocess.call("/opt/openoffice.org3/program/scalc")
Run Code Online (Sandbox Code Playgroud)

...使用相同的行为:

import os
os.system("/opt/openoffice.org3/program/scalc")
Run Code Online (Sandbox Code Playgroud)

这一切都在我之前的Ubuntu 10.04LTS中顺利运行,但事情发生了变化,我不能再重复这些调用了.

你能不能帮我解决如何分叉或做一些事情从subprocess.call()"回来"而不等待程序退出?我试过nohup和后台,/opt/openoffice.org3/program/scalc &但那些什么都不做(可能在Autokey和Py中打破了一些东西)


答:下面的答案实际上并没有起作用,但让我窥探更多,我发现另一个SO答案对我的情况有效!

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

这完全奏效!! 我可以连续打<super>+e2到3次,并且不断向gedit添加标签.:)此脚本使Autokey的行为就像在命令行中键入引号中的命令一样.

Dan*_*Dan 10

它就像使用Popen而不是call:

import subprocess
subprocess.Popen("/opt/openoffice.org3/program/scalc")
Run Code Online (Sandbox Code Playgroud)

call 应该永远不会这样,因为它必须返回退出代码,这意味着程序实际上必须退出.