使用Process()创建网络监视任务。任务()正在转义报价
我想发送一个单引号的参数任务(进程名称监视)。这需要单引号,因为它可以有空格。 (见task.arguments .append(? “ - P '!(PROCNAME)'”)下面)
task = Process()
pipe = Pipe()
task.launchPath = "/usr/bin/nettop"
task.arguments = ["-j time,interface,state,bytes_in,bytes_out","-k rx_dupe,rx_ooo,re-tx,rtt_avg,rcvsize,tx_win,tc_class,tc_mgt,cc_algo,P,C,R,W","-n","-L 0"]
var procName = currentSelection?.procname
if(procName != nil && procName != "") {
task.arguments?.append("-p '\(procName!)'")
}
task.standardOutput = pipe
task.launch()
根据文档不要求报价,因为没有外壳膨胀发生
https://developer.apple.com/reference/foundation/process/1408983-arguments
具体
的NSTask对象传递他们TH之前两个路径和参数适当的C风格的字符串(使用fileSystemRepresentation)字符串转换e任务通过argv []。参数中的字符串不会进行外壳扩展,因此您不需要执行特殊引号,并且不会解析shell变量(例如$ PWD)。
但是,它似乎在自动转义它们并将该转义版本作为文字发送到操作系统。调试器将它们显示为已转义,无论我是否手动将其转义,以便在此处了解其状态。我无法得到一个完整的命令行,让nettop显示在top,htop或ps -f中,但是,当我将procName添加到任务参数列表时,该命令没有获得任何数据,除了正常的nettop标题。这表明nettop正在运行,它只是没有找到它的过程嗅探。
所以,问题是:如何将单引号参数(如'Google Chrome')作为参数发送给Process()?
甚至没有想到把它分成两个参数。它在第一时间编译并且比我所拥有的要好得多。谢谢! –