【问题标题】:how do I make a fork or non-blocking system call in python如何在 python 中进行 fork 或非阻塞系统调用
【发布时间】:2012-06-19 01:59:33
【问题描述】:

这与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 和后台处理 /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',))

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

【问题讨论】:

    标签: python ubuntu-12.04 autokey


    【解决方案1】:

    就像使用Popen 代替call 一样简单:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 2020-02-16
      • 2018-06-11
      • 2017-10-03
      • 2014-07-15
      • 2010-12-13
      相关资源
      最近更新 更多