2009-11-10 102 views
0

我正在調試我正在開發的一個服務,它基本上會打開我的.app並將一些數據傳遞給stdin。但它似乎不可能像這樣:Mac OS X應用程序/服務和標準輸入?

open -a myapp.app < foo_in.txt 

是否有可能將東西傳遞給.app的標準輸入?

編輯: 對不起,我應該在SO上發佈這個,並且已經更清楚了。我想要做的是我有一個在Python + py2app中製作的應用程序。我希望能夠在用戶刪除文件時處理這兩個文件,並將其用作服務。第一種情況不是問題,因爲py2app有argv_emulation。我只是檢查第一個參數是否是一個路徑。

但是從標準輸入讀取根本不起作用,它不讀取任何數據,無論我如上面的示例還是管道。如果我將stdin數據傳遞給實際的python主腳本,它將起作用。所以我重新翻譯我的問題,是否可以從標準輸入讀取一個py2app包?

+0

堆棧溢出? – 2009-11-10 17:09:28

+0

(我不知道上面的命令行是不是會打開'而不是打開'myapp.app?) – Arjan 2009-11-10 17:15:23

回答

1

你是什麼意思使用它作爲服務?

您顯示的示例將不起作用,open命令會調用LaunchServices來啓動應用程序,並且LaunchServices API中沒有將stdin數據或類似名稱傳遞給應用程序的地方。

如果要將項目添加到OS X服務菜單中,您應該查看introductory documentation for developers

+0

謝謝,是的,我的意思是服務菜單,這就是我一直在尋找的。我將不得不調查是否可以用py2app開發這種服務。 – pojo 2009-11-11 10:37:41

0

好,

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

會在你myapp.app應用程序中打開foo_in.txt。您需要應用程序的完整路徑,無論是應用程序,垃圾箱還是任何地方...

這取決於您的應用程序的功能。這可能是比較合適的:

cat foo_in.txt | your_command_goes_here 

將讀取foo_in.txt(貓)的內容,並將其傳遞給標準輸入(帶管),這樣的話你只是遵照您的命令/應用。

+0

你試過這個嗎?或者你的意思是*將在你的myapp.app應用程序中打開** foo_in.txt的內容*? – Arjan 2009-11-10 18:20:22

+1

打開命令將在GUI中的應用程序中打開文件。第二個示例將內容傳遞給stdin。 your_command_goes_here ridogi 2009-11-10 18:25:06

+0

可能會產生同樣的效果所以,**內容**的確如此。仍然:你試過這個嗎?顯然,提問者也嘗試了同樣的方式(當然,應用程序爲提問者打開,但它以某種方式沒有傳入該文件的內容)。 – Arjan 2009-11-10 20:53:49

0

要開始搜索作爲根,一會使用:

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

上面運行open如根,但仍open運行搜索作爲普通用戶。相反,人們會use

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

所以,下面,也許(我真的只是猜測)一個需求:

myapp.app/Contents/MacOS/myapp < foo_in.txt
+0

myapp.app/Contents/MacOS/myapp不是一個unix命令,只是一個路徑。我認爲原始的海報正試圖通過標準的命令。如果他們試圖將標準傳遞給涉及Apple Script的GUI應用程序。 – ridogi 2009-11-10 22:51:11

+0

你正在失去我。在我的示例中,myapp.app/Contents/MacOS/myapp是和Finder.app/Contents/MacOS/Finder一樣的命令(可執行文件)(定義爲該軟件包的「info.plist」文件中的可執行文件) )。 – Arjan 2009-11-10 23:21:44

+0

我的不好,你說的不僅僅是一個路徑,但我認爲它不可能將stdin傳遞給一個GUI應用程序的可執行文件,儘管它可以像我說的那樣用Apple Script來完成。 – ridogi 2009-11-11 00:53:51

0

你應該幾乎肯定會通過馬赫港口或分佈式這樣做對象或幾乎任何其他方法的操作系統提供給您的應用程序間通信。

0

open創建了一個全新的過程。因此,不要使用它將東西重定向到終端的應用程序。 你可以嘗試

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

已經提到cat Foo.txt | ./Foo.app/Contents/MacOS/Foo,很大程度上取決於是否設置爲美孚和execurtbale它在你的路徑。在你的情況下,我會檢查.app包的Res​​sources文件夾,它可能包含另一個二進制文件。 A * .app包是一個目錄。它無法處理命令行參數。