2012-06-16 34 views
3

这与this question有关,但采用不同的方式。如何在python中进行分叉或非阻塞系统调用

在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和backgrounding /opt/openoffice.org3/program/scalc &但那些什么都不做(可能打破在自动密钥和PY的东西)


答:下面的答案其实并没有工作,但让我周围窥探更多,我发现了另一个SO answer哪些工作适合我的情况!

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

这完全工作!我连续击中<super>+e 2或3次,并不断添加标签到gedit。 :)此脚本使Autokey的行为与在命令行中输入引号的命令一样。

回答

8

这与使用Popen代替call一样容易:

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

call不应该工作这种方式,因为它必须返回退出代码,这意味着该方案实际上不得不退出。

+0

感谢您的回答,我会尝试。 –

相关问题