Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python子流程:如何在OS X上运行应用程序?_Python_Macos_Osx Snow Leopard_Subprocess - Fatal编程技术网

python子流程:如何在OS X上运行应用程序?

python子流程:如何在OS X上运行应用程序?,python,macos,osx-snow-leopard,subprocess,Python,Macos,Osx Snow Leopard,Subprocess,我正在将windows应用程序移植到OS X 10.6.8。这对我来说是一个新的平台,我面临着一些困难 该应用程序是一个小型Web服务器(瓶子+服务员),由于子流程调用,它正在启动浏览器(基于chromium嵌入式框架) 浏览器是一个应用程序文件,从gui启动时运行正常 我是这样发起的: subprocess.Popen([os.getcwd()+"/cef/cefclient.app", '--url=http://127.0.0.1:8100']) 不幸的是,这在OSError:permi

我正在将windows应用程序移植到OS X 10.6.8。这对我来说是一个新的平台,我面临着一些困难

该应用程序是一个小型Web服务器(瓶子+服务员),由于子流程调用,它正在启动浏览器(基于chromium嵌入式框架)

浏览器是一个应用程序文件,从gui启动时运行正常

我是这样发起的:

subprocess.Popen([os.getcwd()+"/cef/cefclient.app", '--url=http://127.0.0.1:8100'])
不幸的是,这在
OSError:permission denied
的情况下失败

我尝试使用
sudo
运行脚本,结果类似

我可以使用以下命令从shell启动应用程序:

open -a "cef/cefclient.app" --args --url-http://127.0.0.1:8100
但是

失败,出现以下错误

FSPathMakeRef(/Users/.../cefclient.app) failed with error -43.

知道如何解决这个问题吗?

文件
cefclient.app
实际上是一个目录(具体来说是一个目录),而不是应用程序的可执行文件。真正的可执行文件位于包中,路径类似于
Contents/MacOS/executable\u name
。因此,要启动它,您需要执行以下操作:

subprocess.Popen([os.getcwd()+"/cef/cefclient.app/Content/MacOS/executable_name",
                  "--url=http://127.0.0.1:8100"])

文件
cefclient.app
实际上是一个目录(特别是一个目录),而不是应用程序的可执行文件。真正的可执行文件位于包中,路径类似于
Contents/MacOS/executable\u name
。因此,要启动它,您需要执行以下操作:

subprocess.Popen([os.getcwd()+"/cef/cefclient.app/Content/MacOS/executable_name",
                  "--url=http://127.0.0.1:8100"])
或者

os.system('open -a "cef/cefclient.app" --args --url-http://127.0.0.1:8100')
这取决于你是否想要控制stdin/stdout或者启动应用程序是否足够

或者

os.system('open -a "cef/cefclient.app" --args --url-http://127.0.0.1:8100')

这取决于你是否想要控制stdin/stdout或者启动应用程序是否足够

使用
open-a“应用程序路径”[应用程序参数]
应该可以工作。例如,
open-a/Applications/Google\Chrome.apphttp://www.google.com
在我的Chrome会话中打开Google。您的解决方案将启动该应用程序的另一个实例——这是您在OS X上通常不会执行的操作。因此,它应该是
Popen(['open','-a','cef/cefclient.app','-args','-url)-http://127.0.0.1:8100“])
?是的,这似乎适合我
subprocess.Popen(['open','-a',“/Applications/Google Chrome.app”])
对我有效(上面是open被告知用Google Chrome打开的“文件”,而不是传递给Chrome的参数),这是有效的,但如果我使用“open”命令(启动Mac OS-X代码包(如.app Applications)所必需的),则子流程是“open”的进程,而不是我正在启动的实际应用程序。有没有办法抓取我想要启动的实际应用程序的子进程?它可以工作,但是…首先,Popen对象代表“打开”进程,而不是Chrome.App,其次,“打开”非常短暂,因此你无法抓到实际应用程序-如果你想捕获其输入/输出,common因此,这个解决方案还远远不够完美;使用
open-a“Application Path”[应用程序参数]
应该可以工作,例如
open-a/Applications/Google\Chrome.apphttp://www.google.com
在我的Chrome会话中打开Google。您的解决方案将启动该应用程序的另一个实例——这是您在OS X上通常不会执行的操作。因此它应该是
Popen(['open'、'-a'、'cef/cefclient.app'、'-args'、'-url-http://127.0.0.1:8100“]
?是的,这似乎对我有效。
subprocess.Popen(['open','-a',“/Applications/Google Chrome.app]”)
对我有效(上面是open被告知用Google Chrome打开的“文件”,不是传递给Chrome的参数)这有效,但如果我使用“open”命令(启动Mac OS-X代码包(如.app应用程序)所必需的-子流程是“开放的”进程,而不是我正在启动的实际应用程序。有没有办法抓取我想要启动的实际应用程序的子进程?它可以工作,但是…首先,Popen对象代表“打开”进程,而不是Chrome.App,其次,“打开”非常短暂,因此你无法抓到实际应用程序-如果你想捕获其输入/输出,common因此,这个解决方案还远远不够完美;
os.getcwd()+'cef/cefclient.app'
看起来不太合适。对我来说,
getcwd()
没有添加尾随斜杠。使用
os.path.join(os.getcwd(),'cef/cefclient.app')可能会更走运
您是否绝对确定在打开文档后需要-a?我相信您只希望在尝试“打开”文档并且需要提供用于打开该文档的应用程序的名称时使用-a。getcwd后缺少右/。无论如何,该命令仍然失败
os.getcwd()+“cef/cefclient.app”
看起来不对劲。对我来说,
getcwd()
没有添加尾随斜杠。你可能会更幸运地使用
os.path.join(os.getcwd(),'cef/cefclient.app')
你绝对确定在打开后需要-a吗?我相信你只有在尝试“打开”时才需要它一个文档,需要提供用于打开该文档的应用程序的名称。getcwd之后,/缺失。无论如何,该命令仍然失败