2014-01-21 58 views
0

我是Objective-C的新手。目前我試圖用NSTask執行跛腳。下面的代碼似乎工作,因爲Xcode's輸出空間顯示我lame的標準輸出,即顯示與終端上的lame輸出相同。執行NSTask,但沒有輸出跛腳

但我不能在我的桌面上得到任何輸出文件,即test.mp3。爲什麼我不能得到任何輸出?我的代碼有問題嗎?

NSTask *task = [[NSTask alloc] init]; 
[task setLaunchPath:@"/usr/local/bin/lame"]; 
[task setArguments:[NSArray arrayWithObjects:@"/Users/xanadu62/Music/test.wav",nil]]; 
[task setStandardOutput:[NSFileHandle fileHandleForWritingAtPath:@"/Users/xanadu62/Desktop/test.mp3"]]; 
[task launch]; 

此外,我想使用「--preset extreme」作爲跛腳選項。但是「任務setArguments:」不允許使用此選項作爲參數。我想知道我該如何解決這個問題。

+0

你不及格殼路徑NSTask。其實,對不起...我猜這樣會沒事的,因爲沒有名字包含空格。同時,不跛取一些設置來配置?你沒有NSPipe。 –

回答

1

試試這樣說:

NSTask *task = [[NSTask alloc] init]; 

[task setLaunchPath:@"/usr/local/bin/lame"]; 

[task setArguments: [NSArray arrayWithObjects: 
            @"--preset", 
            @"extreme", 
            @"/Users/xanadu62/Music/test.wav", 
            @"/Users/xanadu62/Desktop/test.mp3", 
            nil] 
]; 

[task launch]; 

你並不需要使用管道。

usage: lame [options] <infile> [outfile] 

    <infile> and/or <outfile> can be "-", which means stdin/stdout. 
+0

謝謝。你的代碼工作正常。 – xanadu6291

+0

不錯,反饋的txs! – 2014-01-21 17:04:57

+0

順便說一句:http://boredzo.org/make-ram-disk/顯示NSTask公司在行動(源代碼在頁面底部)。 – 2014-01-21 22:30:02

1

沒用過跛,但通過查看文檔的正確終端命令將是

「跛腳--preset極端/Users/lawrencepires/Desktop/test.mp3 /用戶/ lawrencepires /桌面/ test1.mp3「

test.mp3是輸入文件,test1.mp3是輸出文件。

工作守則 - (可能是值得改變活輸出)

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
// Insert code here to initialize your application 


[self lameconvert]; 
} 


- (void)lameconvert { 

NSTask *task = [[NSTask alloc] init]; 
[task setLaunchPath:@"/usr/local/bin/lame"]; 
NSArray *argArray = [NSArray arrayWithObjects:@"--preset",@"extreme",@"/Users/xanadu62/Music/test.wav",@"/Users/xanadu62/Music/test.wav",nil]; 

[task setArguments:argArray]; 

[task launch]; 
[task waitUntilExit]; 
NSLog(@"Conversion Complete"); 


} 
@end 
+0

謝謝你的回答也解決了我的問題。但接受的答案是一個。所以我把第一個答案標記爲接受的答案。 – xanadu6291