[英]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.