Vytváram aplikáciu na výrobu kakaa, ktorá bude musieť spustiť rails
Príkaz. Tento príkaz generuje výstup a prúdi ho stdout
, Chcem ukázať tento výstup používateľovi v NSTextView
(takže základný tok stdout
na NSTextView
). Moja aplikácia by nemala "visieť" pri spustení príkazu (napr git
príkaz trvá dlho, kým sa dokončí nahrávanie). Nezaujíma ma, ako by som mal spustiť príkaz, pokiaľ môžem nastaviť pracovný adresár.
Použitie rámca Ruby pre kakao nie je žiadnou možnosťou, pretože takisto potrebujem urobiť pre príkazy, ktoré nie sú rubínové git
.
Môže mi niekto pomôcť? Vďaka
odpovede:
2 pre odpoveď č. 1Budete musieť použiť NSTask trieda.
NSTask * task;
NSPipe * pipe;
NSFileHandle * fileHandle;
task = [ [ NSTask alloc ] init ];
pipe = [ NSPipe pipe ];
fileHandle = [ pipe fileHandleForReading ];
[ fileHandle readInBackgroundAndNotify ];
[ task setLaunchPath: @"/bin/ls" ];
[ task setStandardOutput: pipe ];
[ task setStandardError: pipe ];
[ task launch ];
Potom môžete použiť popisovač súborov na získanie stdout.
Pracovný adresár môžete nastaviť pomocou tlačidla setCurrentDirectoryPath metóda.
Argumenty je možné nastaviť pomocou setArguments metóda.
0 pre odpoveď č. 2
ak potrebujete údaje používať počas čítania, použite prístup s NSNotification
ktorý je opísaný v tento príspevok na cocoabuilder.com.
V podstate sa to nastavuje NSPipe
objekt, spája stdout NSTask
na potrubie a počúva NSFileHandleReadToEndOfFileCompletionNotification
potrubia na spracovanie údajov, ktoré boli tlačené do potrubia.