mac运行linux命令,iOS:mac.app执行shell命令

报错

1:

错误:

/bin/bash: line 1: /Users/liuyaqiang/Desktop/GitHub/KTMRobot/auto.sh: Operation not permitted

解决方法:

Singing&Capabilitiesy移除AppSandbox

代码

import Cocoa

class CommandRunner: NSObject {

/** 同步执行

* command: shell 命令内容

* returns: 命令行执行结果,积压在一起返回

*

* 使用示例

let (res, rev) = CommandRunner.sync(command: "ls -l")

print(rev)

*/

static func sync(command: String) -> (Int, String) {

let utf8Command = "export LANG=en_US.UTF-8\n" + command

return sync(shellPath: "/bin/bash", arguments: ["-c", utf8Command])

}

/** 同步执行

* shellPath: 命令行启动路径

* arguments: 命令行参数

* returns: 命令行执行结果,积压在一起返回

*

* 使用示例

let (res, rev) = CommandRunner.sync(shellPath: "/usr/sbin/system_profiler", arguments: ["SPHardwareDataType"])

print(rev)

*/

static func sync(shellPath: String, arguments: [String]? = nil) -> (Int, String) {

let task = Process()

let pipe = Pipe()

var environment = ProcessInfo.processInfo.environment

environment["PATH"] = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"

task.environment = environment

if arguments != nil {

task.arguments = arguments!

}

task.launchPath = shellPath

task.standardOutput = pipe

task.launch()

let data = pipe.fileHandleForReading.readDataToEndOfFile()

let output: String = String(data: data, encoding: String.Encoding.utf8)!

task.waitUntilExit()

pipe.fileHandleForReading.closeFile()

return (Int(task.terminationStatus), output)

}

/** 异步执行

* command: shell 命令内容

* output: 每行的输出内容实时回调(主线程回调)

* terminate: 命令执行结束状态(主线程回调)

*

* 使用示例

CommandRunner.async(command: "ls -l",

output: {[weak self] (str) in

self?.appendLog(str: str)

},

terminate: {[weak self] (code) in

self?.appendLog(str: "end \(code)")

})

*/

static func async(command: String,

output: ((String) -> Void)? = nil,

terminate: ((Int) -> Void)? = nil) {

let utf8Command = "export LANG=en_US.UTF-8\n" + command

async(shellPath: "/bin/bash", arguments: ["-c", utf8Command], output:output, terminate:terminate)

}

/** 异步执行

* shellPath: 命令行启动路径

* arguments: 命令行参数

* output: 每行的输出内容实时回调(主线程回调)

* terminate: 命令执行结束状态(主线程回调)

*

* 使用示例

CommandRunner.async(shellPath: "/usr/sbin/system_profiler",

arguments: ["SPHardwareDataType"],

output: {[weak self] (str) in

self?.appendLog(str: str)

},

terminate: {[weak self] (code) in

self?.appendLog(str: "end \(code)")

})

*/

static func async(shellPath: String,

arguments: [String]? = nil,

output: ((String) -> Void)? = nil,

terminate: ((Int) -> Void)? = nil) {

DispatchQueue.global().async {

let task = Process()

let pipe = Pipe()

let outHandle = pipe.fileHandleForReading

var environment = ProcessInfo.processInfo.environment

environment["PATH"] = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"

task.environment = environment

if arguments != nil {

task.arguments = arguments!

}

task.launchPath = shellPath

task.standardOutput = pipe

outHandle.waitForDataInBackgroundAndNotify()

var obs1 : NSObjectProtocol!

obs1 = NotificationCenter.default.addObserver(forName: NSNotification.Name.NSFileHandleDataAvailable,

object: outHandle, queue: nil) { notification -> Void in

let data = outHandle.availableData

if data.count > 0 {

if let str = NSString(data: data, encoding: String.Encoding.utf8.rawValue) {

DispatchQueue.main.async {

output?(str as String)

}

}

outHandle.waitForDataInBackgroundAndNotify()

} else {

NotificationCenter.default.removeObserver(obs1)

pipe.fileHandleForReading.closeFile()

}

}

var obs2 : NSObjectProtocol!

obs2 = NotificationCenter.default.addObserver(forName: Process.didTerminateNotification,

object: task, queue: nil) { notification -> Void in

DispatchQueue.main.async {

terminate?(Int(task.terminationStatus))

}

NotificationCenter.default.removeObserver(obs2)

}

task.launch()

task.waitUntilExit()

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go channel 缓冲区最大限制_Go语言11周年,泛型问题有望明年得到解决

作者 | 田晓旭、万佳 近日,Go 团队发布长篇博文庆祝 Go 语言开源 11 周年。 Go 团队在博文写道,“回想 Go 语言十周年庆典恍如隔世。虽然 2020 年有诸多艰难,但我们一直在推动 Go 语言的发展,其中有不少值得回忆的美好瞬间。”1 G…

python 排列组合_python 编写排列组合

python在编写排列组合是会用到 itertools 模块 排列 import itertools mylist list(itertools.permutations([A,B,C,D],4)) # 全排列 print(mylist) mylist1 list(itertools.permutations([A,B,C,D],3)) # 4个里面选3个排列 print(mylist1) #5!1*2*3*4*5#0!1#M个选N个 M&#x…

深度linux 转中文,Linux Deepin 中文Linux系统的新希望?

Linux Deepin 中文Linux系统的新希望?出处:快科技 2010-08-02 22:51:18 作者:Plum 编辑:Plum[爆料] 收藏文章前言说到国产系统,我们想到的东西可能并不多,在这个Windows垄断的领域,国产的空…

python 谷歌地图api_《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档...

Foundations of Python Network Programing,Third Edition 《python网络编程》,本书中的代码可在Github上搜索fopnp下载本书的第一章中使用到了google地图的api来获取一个地址的经度和纬度,因为众所周知的原因会出现无法访问,我们…

耳机不分主从是什么意思_无延时音质好的蓝牙耳机能代替有线耳机吗—DOSS T60上手体验...

伴随着手机的更新迭代,大概是从iPhone 7的时候大家开始对手机是否有3.5mm耳机孔这个问题开始纠结起来,好像是从真无线耳机出来时大家又对3,5mm耳机孔又不是那么的纠结。此一时彼一时,大家为何对耳机接口为何有这么大的转变,就拿今…

switch安装linux教程,Freeswitch Linux安装教程 | 【韩涛博客】

大家都有一个经历,经过漫长的编译后,各种报错,经过整理后,我总结出了以下无错步骤:(一)安装编译所需要的环境包yum install -y autoconf automake libtool gcc-c ncurses-devel make zlib-devel libjpeg-devel(二)安装…

空间金字塔池化_回顾语义分割—DenseASPP (密集空洞空间金字塔池化)

引言在分辨率大,分割目标尺度范围广的语句分割任务中,长距离的上下文信息以及不同尺度的信息对于分割结果十分重要。所以为了增大卷积但感受野,常常对提取的feature map进行池化以达到感受野增大的效果,同时通过跳跃连接来结合多尺…

python软件如何安装方法_【新手必看】Python软件下载及安装教程

原标题:【新手必看】Python软件下载及安装教程 Python下载:免费开源 官网地址:https://www.python.org/downloads/ 下载对应版本Python:python-3.6.1-amd64.exe(我的电脑是window 7-64位),所以我…

如何下载linux历史版本下载,CentOS历史版本下载方法

实验室要求统一Linux版本,原来我用的是Ubuntu,现在我在的实验室是centos,我也就只能改了。实验室和个人不同,个人的Linux版本可能经常换,只要有新的版本出来,我就会去下载下来,在虚拟机里面试一…

table超出边框出现滚动条_精美横轴智能滚动条设计

如何设计一款精美的横轴智能滚动条?本文对设计过程进行了详细地介绍。页面布局页面设定新建一个页面文件,命名为【精美横轴智能滚动条设计】。在【精美横轴智能滚动条设计】页面内新建一个命名为【table】的动态面板。【底层背景】:从元件库内…

如何在python中安装matplotlib模块_Windows下为Python安装Matplotlib模块

这玩意反反复复弄了一晚上,这里详细叙述下如何安装,肯定会对大家有所帮助。首先默认大家都装了Python,这个从官网下基本不会有任何难度。 (1)Setuptools的安装 为啥先说这个,后面所有whl文件都要用这个安装…

linux 状态码的意义,HTTP状态码是什么?常见的状态码描述都有什么?

网络安全学习过程中,网络协议都有哪些相关内容?HTTP状态码是什么?HTTP状态码有什么意义吗?常见的状态码描述都有什么?很多小伙伴不是很清楚,我们来看看。什么是HTTP状态码?当浏览者访问一个网页…

马冬晗学习计划表_一年时间提升学习和工作能力,我做对了这3点

文 / 小椰子 昨晚和朋友去大排档吃宵夜,酒足饭饱之后,发现他两眼无神地盯着桌上的空啤酒瓶:“讲真,毕业后出来工作这一年多,我好几次想重新回去读书。”我诧异地看着他,静静地听他继续说下去。“现在的自己…

python编写递归函数、求斐波那契数列第n项_python使用递归求斐波那契数列中第n个数的值...

原博文 2019-11-29 16:33 − def byh(n): if n 1 or n 2: return 1 return byh(n-1) byh(n-2)print(byh(8)) #1,1,2,3,5,8,13,21,输出结果:21... 相关推荐 2019-12-12 14:08 − 使用range函数生成数值列表 使用range函数打印1~5的数字 for i in range(1,6): prin…

sqlsugar 批量删除guid类型主键_SAP使用MASS批量修改主数据

由于公司业务部门需要,向我提出的这个要求,我就在网上查了下,看到了一位知乎的前辈大神写了,自己测试了下把过程更详细的记录了一下,也挺好用,就在这里记录和分享一下,便于以后查看。业务场景&a…

kali linux 搜狗输入法,kali_Linux下安装搜狗输入法

1. 由于我的虚拟机里kali是32位,如果64位系统就找对应的安装包。依赖软件下载地址:http://http.kali.org/pool/main/f/fcitx/1 ) dpkg -i fcitx-libs_4.2.8.4-3~bpo701_amd64.deb2 ) dpkg -i fcitx-libs_4.2.8.4-3~bpo701_i386.deb3 ) dpkg -i fcitx-l…

python数据库操作sqlite_使用Python对SQLite数据库操作

原博文 2017-04-05 15:25 − SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在IOS和Android的APP中都可以集成。 Python内置了SQLite3&…

python工业自动化镜头_ELVIS III + Python | 如何用Python对ELVIS III进行编程开发

通过本文,你将学习如何在NI ELVIS III上安装和使用Python:连接到NI ELVIS III,安装包和库,下载存储库,运行Python代码。1 - 软件环境搭建配置ELVIS III设备1)安装 NI Measurement Live Support Files;2)通过…

多屏互动协议 linux,【Linux系统多屏互动电视】Linux系统多屏互动电视报价及图片大全-列表版-ZOL中关村在线...

对比所属:TCLE5690系列最大的特点就是搭载了当前彩电领域最高端、最火爆的4K UHD超高清面板。并采用MSTAR四核处理器和最新的Android4.2操作系统,确保了超高清信号从输入、到解码、到显示的全程超高清处理,确保最优化的4K超高清显示。产品定位…

python删除txt指定内容_python删除文件中指定内容

更多追问追答 追问 我按你的方法试了下,文件内容还在,没有删掉...... 追答 把你的 file.txt 贴出来,确保 20150723 在要删除行的最开始,前面不能有空格等其他任何字符。 另外, 原来的代码最后漏了一行lines [l for …