Как запустить команду «screen» из NSTask? - PullRequest
0 голосов
/ 11 мая 2011

Я хочу контролировать виртуальный COM-порт (Arduino RFID ) на моем Mac. Я могу запустить «screen /dev/tty.serialnumber» из терминала, и он выдает серийный номер RFID, когда я проведу по нему.

Как только я попробую его с Xcode с помощью NSTask, я получаю следующий вывод.

Должен быть подключен к терминалу.

Вот мой код:

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

[cd setLaunchPath:@"/usr/bin/screen"];
[cd setArguments:[NSArray arrayWithObjects:@"-L",@"/dev/tty.usbserial-A800509K",nil]];

NSPipe *pipe;
pipe = [NSPipe pipe];
[cd setStandardOutput: pipe];
[cd setStandardInput:[NSPipe pipe]];

NSFileHandle *file;
file = [pipe fileHandleForReading];

[cd launch];

NSData *data;
data = [file readDataToEndOfFile];

NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];

NSLog (@"%@", string);

[cd waitUntilExit];
[cd release];

1 Ответ

0 голосов
/ 27 сентября 2011

Я думаю, что вам лучше получить прямой доступ к COM-порту либо с помощью базовых библиотек, либо с помощью сторонних библиотек Obj-C (например, https://github.com/pbosetti/PBSerialPort). Кроме того, если вы хотите контролировать COM-порт, вам придется установить поток, считывающий последовательный порт и обновляющий текстовую область в пользовательском интерфейсе. Помните, что вторичный поток должен обновлять пользовательский интерфейс с помощью метода - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait.

...