Skip to main content
 首页 » 编程设计

android之操作系统错误 : [Errno 2] No such file or directory when running systrace.

2025年05月04日53shanyou

我目前正在尝试运行 platform-tools 文件夹中包含的 systrace python 脚本,但出现以下错误:

File "systrace.py", line 274, in <module> 
 main() 
File "systrace.py", line 60, in main 
 device_sdk_version = get_device_sdk_version() 
File "systrace.py", line 44, in get_device_sdk_version 
 stderr=subprocess.PIPE) 
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
 errread, errwrite) 
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
 raise child_exception 
OSError: [Errno 2] No such file or directory 

我在 Ubuntu 12.04 LTS 上运行。这是我用来运行 systrace 的命令:

sudo python systrace.py -o output.html 

注意:sudo是为了避免以下错误:

File "systrace.py", line 274, in <module> 
 main() 
File "systrace.py", line 63, in main 
 os.execv(legacy_script, sys.argv) 
OSError: [Errno 13] Permission denied 

在网络上进行一些搜索后,我发现一种解决方案是将 adb 添加到我的 PATH 变量中。我将 platform-tools 目录添加到我的 PATH 中,但我仍然遇到同样的错误。我继续检查导致问题的代码,显然是这个 fragment :

adb = subprocess.Popen(getprop_args, stdout=subprocess.PIPE, 
                     stderr=subprocess.PIPE) 

其中getprop_args定义如下:

getprop_args = ['adb', 'shell', 'getprop', 'ro.build.version.sdk'] 

据我了解,代码正在尝试运行以下命令:

adb shell getprop ro.build.version.sdk 

我在控制台中运行了命令,它没有问题。我还复制了这两行代码并在 python 解释器中运行它们并且它运行没有问题。我真的不知道如何解决这个问题。有谁知道可能的解决方案?

请您参考如下方法:

好的,所以我发现了问题所在。问题是我在 python systrace.py -o output.html 之前放置的 sudo 我不知道,但我猜是 PATH 使用 sudo 时的变量与不使用时不同。所以 sudo 中的 PATH 没有 platform-tools 目录。所以我删除了 sudo 并收到以下错误:

File "systrace.py", line 274, in <module> 
 main() 
File "systrace.py", line 63, in main 
 os.execv(legacy_script, sys.argv) 
OSError: [Errno 13] Permission denied 

为了解决这个问题,我在 legacy_script 上运行了以下命令:

$chmod +x ./systrace-legacy.py 

现在我可以毫无问题地运行 systrace 脚本了 :P