【发布时间】:2017-08-29 23:39:13
【问题描述】:
操作系统:- Mac OSX
Python
我是使用 python 进行多处理的新手。对于我的应用程序,我想从 main 打开一个新进程并在不锁定主进程的情况下运行它。例如。我正在运行进程A,现在我需要从A打开一个新应用程序,我们称之为进程B。我想以这样的方式打开B,它不会阻塞进程A并且仍然从进程我应该能够停止任何时候都可以的过程。
到目前为止,我尝试过的任何代码都是基本的,它们锁定了进程 A。因此我无法实现它。有什么解决方法可以做到这一点吗?
我阅读了关于 fork and spawn 的文章,但不明白如何使用它来打开应用程序。我也尝试过线程。但没有成功。谁能告诉我该怎么做?
目前我正在使用 subprocess.call() 通过 Python 打开 Mac 应用程序。 真的很有帮助。
编辑:-
I tried the accepted answer of this link 但无济于事。因为它会阻塞终端,一旦我们手动关闭应用程序,它就会以输出 0 退出。
我也试过这个solution。它也会这样做。我想让调用进程不被被调用进程阻塞。
在 windows 中使用 os.system() 执行相同的任务时,这正是我想要的。但我不知道如何在 Mac 中做到这一点。
编辑 2:代码
模块 1:
import subprocess
def openCmd(name):
subprocess.call(["/usr/bin/open", "-W", "-n", "-a", "/Applications/"+name+".app"])
def closeCmd(name):
subprocess.call(['osascript', '-e', 'tell "'+name+'" to quit'])
主模块:
import speech_recognition as sr
import pyttsx
import opCl
speech_engine = pyttsx.init('nsss')
speech_engine.setProperty('rate', 150)
OPEN_COGNATES=['open']
CLOSE_COGNATES=['close']
def speak(text):
speech_engine.say(text)
speech_engine.runAndWait()
re = sr.Recognizer()
def listen():
with sr.Microphone() as source:
re.adjust_for_ambient_noise(source)
while True:
speak("Say something!")
print ">>",
audio = re.listen(source)
try:
speak("now to recognise it,")
value=re.recognize_google(audio)
print (value)
speak("I heard you say {}".format(value))
value=value.strip().split()
name=" ".join(value[1:])
if value[0] in OPEN_COGNATES:
speak("opening "+name)
opCl.openCmd(name)
pass
elif value[0] in CLOSE_COGNATES:
speak("opening "+name)
opCl.closeCmd(name)
pass
else:
pass
except sr.UnknownValueError as e:
speak("Could not understand audio")
print ('Could not understand audio')
except sr.RequestError as e:
speak("can't recognise what you said.")
print ("can't recognise what you said")
if __name__=='__main__':
listen()
【问题讨论】:
-
@stovfl 我编辑了这个问题。我希望现在它会有所帮助。
-
我希望它现在可以工作@stovfl
标签: python macos multiprocessing python-multithreading