4

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

在 Ubuntu 中,我使用 Autokey,它使用 python 来自动化它观察到的击键。所以我已经<super>+e映射到<shift>+<super>+3打开 Gedit,打开 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 和背景/opt/openoffice.org3/program/scalc &,但它们什么也没做(可能会破坏 Autokey 和 Py 中的某些内容)


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

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

这完全有效!我可以连续点击<super>+e2 或 3 次,它会不断向 gedit 添加标签。:) 此脚本使 Autokey 的行为就像在命令行中键入引号中的命令一样。

4

1 回答 1

12

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

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

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

于 2012-06-16T02:08:27.563 回答