簡體   English   中英

如何在python中進行fork或非阻塞系統調用

[英]how do I make a fork or non-blocking system call in 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和后台/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>+e 2或3次,並且不斷向gedit添加標簽。 :)此腳本使Autokey的行為就像在命令行中鍵入引號中的命令一樣。

它就像使用Popen而不是call一樣簡單:

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

call應該永遠不會那樣,因為它必須返回退出代碼,這意味着程序實際上必須退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM