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

时间:2012-06-16 01:50:58

标签: python ubuntu-12.04 autokey

这与this question有关,但有不同的看法。

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

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

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

...使用相同的行为:

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

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

请问如何在不等待程序退出的情况下帮助我如何分叉或做一些事情从“subprocess.call(”“”“回来”?我尝试了nohup并后台{{1但那些什么都不做(可能会破坏Autokey和Py中的东西)


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

/opt/openoffice.org3/program/scalc &

这完全奏效!!我可以连续点击#Enter script code -- mapped to <super>+e import thread thread.start_new_thread(os.system,('gedit',)) 2或3次,并且不断向gedit添加标签。 :)此脚本使Autokey的行为就好像命令行中的命令一样。

1 个答案:

答案 0 :(得分:9)

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

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

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