通过 Python 子进程运行时使用仪器获取 iDevices 卡住了

Posted

技术标签:

【中文标题】通过 Python 子进程运行时使用仪器获取 iDevices 卡住了【英文标题】:Getting iDevices using instruments got stuck when running through Python subprocess 【发布时间】:2016-09-05 12:40:27 【问题描述】:

我正在编写一个简单的 python 脚本,使用 Subprocess 将 iDevices 列表附加到我的 mac。我使用的命令是“instruments -s devices”。当我通过命令行运行时,此命令工作正常,但是当我使用子进程使用相同的命令时遇到问题。

下面是我的简单python脚本

    import subprocess

    cmd = ['instruments', '-s', 'devices']
    response = subprocess.Popen(cmd,stdout=subprocess.PIPE)
    print response.communicate()

当我运行上面的 python 命令时,我的终端屏幕如下所示

MacBook-Pro-9:lib darren$ python iosRemoteLib.py
2016-09-05 14:30:38.648 instruments[21276:1052546] WebKit Threading Violation - initial use of WebKit from a secondary thread.

python 进程挂起并且没有返回任何响应。看起来像一些线程问题,我无法弄清楚是什么。

谢谢

【问题讨论】:

【参考方案1】:

你有两个版本的 Xcode 吗? 我面临子进程(仪器 -s 设备)挂起的完全相同的问题。我有 XCode 8.0 和 7.3.1。此问题仅在我切换到 7.3.1 后发生。事实证明 subprocess.Popen('sudo instruments -s devices', stdout=subprocess.PIPE) 工作得很好。所以可能是权限问题。

【讨论】:

以上是关于通过 Python 子进程运行时使用仪器获取 iDevices 卡住了的主要内容,如果未能解决你的问题,请参考以下文章

python子进程模块的动态输出

与 grep 一起使用时 Python 子进程调用卡住 |

python进程|线程|协程

如何获取android 进程信息

Python:在记录内存时获取子进程 STDOUT

使用 Python 子进程通信方法时如何获取退出代码?