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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top