NsTask执行终端命令的问题
问题描述:
通常在终端中,我会执行此命令与串行USB设备进行通信。NsTask执行终端命令的问题
回声-e“\ XFF \ X01 \ X01”> /dev/cu.usbserial-A8003YzT
我试图使用NStask可可应用程序中做到这一点,但我没有得到爱因为某些原因。
继承人我的代码:
- (IBAction) doCommand:(id)sender{
{
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath:@"/bin/echo"];
[task setArguments:
[NSArray arrayWithObjects:@"-e '\\xFF\\x01\\x01' > /dev/cu.usbserial-A8003YzT", nil]];
[task launch];
[task release];
}}
我知道代码基本上是工作,因为我用同样的脚本执行的其他终端命令.....不知道为什么我不能得到回音开火....也许我错过了简单的东西?
感谢所有帮助
答
您正在尝试发送'\xFF\x01\x01' > /dev/cu.usbserial-A8003YzT
作为第一个参数echo
,但是这不是当你从一个shell提示符下运行该命令会发生什么。只有第一个被引用的部分被作为参数发送给echo。 Bash解释>
本身,捕获echo命令的输出,并将其重定向到指定的文件 - 在这种情况下,是一个代表USB设备的文件。
如果你想运行一个NSTask
,将解释与重定向,管道,这样,你就需要使用/bin/sh
作为启动路径,和-c
,your shell command
作为参数shell命令。
或者,您可以完全跳过NSTask
,只需打开设备文件的NSFileHandle
,然后发送要发送它的三字节序列。回声是方便的互动调试这样在终端的东西,但在你的应用程序中启动一个外部任务,只是写三个字节的文件,是非常激烈的矫枉过正... :-)
+1“或者。 ..“根据我的经验,需要启动shell的NSTasks是一个**糟糕的想法。首先,他们打破了NSLog的其余程序执行。 – Richard 2011-05-16 15:32:51
@Sherm ....是的,照顾了这个问题。现在工作。我确信我不了解正确运行命令的正确功能。谢谢你清理那个。我对Obj-c相当陌生,所以我会给NSFileHandle一看。听起来这是一个更好的方法,只是不知道现在怎么样.... @理查德,谢谢你的提高,我读过同样的东西,并将NSfilehandle看作一个更好的选择谢谢大家! – butteryak 2011-05-16 16:36:37