2012-06-16 31 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

感謝您的回答,我會嘗試。 –

相關問題