这与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>+e
2或3次,它一直在gedit中添加制表符。:)此脚本使Autokey的作用类似于在命令行键入引号中的命令。
使用
Popen
而不是call
一样简单:call
不应该这样工作,因为它必须返回退出代码,这意味着程序实际上必须退出。相关问题 更多 >
编程相关推荐