Как запустить команду экрана из NSTask?

Я хочу контролировать виртуальный 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];

person Justin    schedule 11.05.2011    source источник
comment
Это screen(1) говорит вам, что его можно запустить только из терминала. Вы не можете использовать другую программу или напрямую читать /dev/tty? См. этот вопрос: stackoverflow.com/questions/2504714/   -  person    schedule 11.05.2011


Ответы (1)


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

person p4010    schedule 27.09.2011