我正在调试我正在开发的服务,它基本上会打开我的.app并将一些数据传递给stdin。但看起来似乎不太可能:
open -a myapp.app < foo_in.txt
是否可以将内容传递给.app的stdin?
修改:
对不起,我应该在SO上发布这个并且更清楚。我想要做的是我有一个用Python + py2app制作的应用程序。我希望能够在用户删除文件时将其处理,并将其用作服务。第一种情况不是问题,因为py2app有argv_emulation
。我只是检查第一个参数是否是路径。
但是从stdin读取根本不起作用,无论我是如上所述还是管道,它都不会读取任何数据。如果我将stdin数据传递给实际的python主脚本,它可以工作。所以我重新解释一下我的问题,是否可以使用py2app包读取stdin?
答案 0 :(得分:1)
将它用作服务是什么意思?
您显示的示例将不起作用,open命令调用LaunchServices来启动应用程序,并且LaunchServices API中没有地方传递stdin数据或类似于应用程序。
如果您要将项目添加到OS X服务菜单,则应查看introductory documentation for developers。
答案 1 :(得分:0)
好吧,
open -a /Applications/myapp.app < foo_in.txt
将在myapp.app应用程序中打开foo_in.txt。您需要应用程序的完整路径,无论是应用程序,bin还是其他任何位置......
这取决于您的应用程序的功能。这可能更合适:
cat foo_in.txt | your_command_goes_here
这将读取foo_in.txt(使用cat)的内容并将它们传递给stdin(使用管道),因此您只需按照命令/应用程序进行操作即可。
答案 2 :(得分:0)
要以root身份启动Finder,不使用
sudo open -a /System/Library/CoreServices/Finder.app
上面以root身份运行open
,但仍然open
以普通用户身份运行Finder。相反,人们会use:
sudo /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder
所以,在那之后,也许(我真的只是猜测)需要:
myapp.app/Contents/MacOS/myapp < foo_in.txt
答案 3 :(得分:0)
您几乎肯定会通过Mach端口或分布式对象执行此操作,或者几乎可以通过操作系统向您提供的任何其他应用程序通信方法。
答案 4 :(得分:0)
open
创造了一个全新的过程。因此,请勿使用它将内容重定向到终端的应用程序。
你可以试试
./Foo.app/Contents/MacOS/Foo < Foo.txt
已经提到了cat Foo.txt | ./Foo.app/Contents/MacOS/Foo
,这取决于你是否将Foo设置为executionrtbale并且它在你的路径中。在你的情况下,我会检查.app包中的Ressources文件夹,它可能包含另一个二进制文件。
A * .app包是一个目录。它无法处理命令行参数。