Saving System Profiler Informationen in einer Datei mit .spx NSTask
Frage
In Cocoa, Ich versuche, eine Taste zu implementieren, die, wenn der Benutzer klickt auf den System-Profiler-Bericht erfassen und auf dem Desktop einfügen.
Code
NSTask *taskDebug;
NSPipe *pipeDebug;
taskDebug = [[NSTask alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(taskFinished:) name:NSTaskDidTerminateNotification object:taskDebug];
[profilerButton setTitle:@"Please Wait"];
[profilerButton setEnabled:NO];
[taskDebug setLaunchPath: @"/usr/sbin/system_profiler"];
NSArray *args = [NSArray arrayWithObjects:@"-xml",@"-detailLevel",@"full",@">", @"
~/Desktop/Profiler.spx",nil];
[taskDebug setArguments:args];
[taskDebug launch];
Aber nicht speichern Sie die Datei auf dem Desktop angezeigt. Mit NSArray * args = [NSArray arraywithobjects: @ "- xml", @ "- Detaillevel", @ "voll", nil] Werke und es fällt die ganze sys Profiler Ausgabe im Konsolenfenster.
Irgendwelche Tipps, warum dies nicht funktioniert oder wie man besser diese umzusetzen? Ich versuche, von der Verwendung eines Shell-Skript oder Apple zu verzichten, um die System-Profiler zu erhalten. Wenn nichts Arbeit ist würde, dass meine letzte Option sein. Vielen Dank im Voraus.
Lösung 2
Das hätte es getan (Dank an Peter und Costique)
[taskDebug setLaunchPath: @"/usr/sbin/system_profiler"];
NSArray *args = [NSArray arrayWithObjects:@"-xml",@"- detailLevel",@"full",nil];
[taskDebug setArguments:args];
[[NSFileManager defaultManager] createFileAtPath: [pathToFile stringByExpandingTildeInPath] contents: nil attributes: nil];
outFile = [ NSFileHandle fileHandleForWritingAtPath:[pathToFile stringByExpandingTildeInPath]];
[taskDebug setStandardOutput:outFile];
[taskDebug launch];
Andere Tipps
NSArray *args = [NSArray arrayWithObjects:@"-xml",@"-detailLevel",@"full",@">", @"~/Desktop/Profiler.spx",nil];
Das wird nicht funktionieren, weil Sie nicht durch die Schale gehen, und >
ist ein Shell-Operator. (Auch ~
ist nichts Besonderes, außer wenn Sie diese erweitern stringByExpandingTildeInPath
verwenden.)
set dass NSFileHandle als die Standardausgabe Aufgabe. Dies ist im Wesentlichen, was die Shell tut, wenn Sie einen >
Operator in ihm verwenden.
Einen NSPipe, send [taskDebug setStandardOutput: meinepipe]. Und liest aus der Datei-Handelte Pfeife