0

我正在调试我正在开发的服务,它基本上会打开我的 .app 并将一些数据传递给标准输入。但似乎不可能:

open -a myapp.app < foo_in.txt

是否可以将东西传递给.app的标准输入?

编辑:对不起,我应该在 SO 上发布这个并且更清楚。我想要做的是我有一个用 Python + py2app 制作的应用程序。我希望能够在用户删除文件时同时处理这两种情况,并将其用作服务。第一种情况不是问题,因为 py2app 有argv_emulation. 我只是检查第一个参数是否是路径。

但是从标准输入读取根本不起作用,无论我是否按照上面的示例进行操作或管道它都不会读取任何数据。如果我将标准输入数据传递给实际的 python 主脚本,它就可以工作。所以我改写我的问题,是否可以使用 py2app 包从标准输入读取?

4

5 回答 5

1

将其用作服务是什么意思?

您显示的示例将不起作用,打开命令调用 LaunchServices 来启动应用程序,并且 LaunchServices API 中没有地方可以传递标准输入数据或类似的应用程序。

如果您的意思是向 OS X 服务菜单添加一个项目,您应该查看面向开发人员的介绍性文档

于 2009-11-11T09:34:28.887 回答
0

好,

open -a /Applications/myapp.app < foo_in.txt

将在您的 myapp.app 应用程序中打开 foo_in.txt。您需要应用程序的完整路径,无论是 Applications、bin 还是它所在的任何位置......

这取决于你的应用程序做什么。这可能更合适:

cat foo_in.txt | your_command_goes_here

这将读取 foo_in.txt 的内容(使用 cat)并将它们传递给 stdin(使用管道),因此您只需使用命令/应用程序进行操作即可。

于 2009-11-10T18:14:37.100 回答
0

要以 root 身份启动 Finder,不会使用:

sudo open -a /System/Library/CoreServices/Finder.app

以上open以root身份运行,但仍以open普通用户身份运行Finder。相反,人们会使用

sudo /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder

因此,在此之后,也许(我真的只是在猜测)一个人需要:

myapp.app/Contents/MacOS/myapp < foo_in.txt
于 2009-11-10T21:29:48.283 回答
0

您几乎肯定应该通过 Mach 端口或分布式对象或操作系统为您提供的几乎任何其他应用程序间通信方法来执行此操作。

于 2009-11-11T08:33:10.793 回答
0

open创建一个全新的流程。因此,不要使用它将内容从终端重定向到应用程序。你可以试试

./Foo.app/Contents/MacOS/Foo < Foo.txt

已经cat Foo.txt | ./Foo.app/Contents/MacOS/Foo非常提到取决于您是否将 Foo 设置为 execurtbale 并且它在您的路径中。在您的情况下,我会检查 .app 包中的 Ressources 文件夹,该文件夹可能包含另一个二进制文件。 *.app 包是一个目录。它不能处理命令行参数。

于 2009-11-11T09:40:15.687 回答