OSError: [errno 2] 运行 systrace.py 时没有这样的文件或目录



我目前正在尝试运行平台工具文件夹中包含的系统跟踪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 上。这是我用来运行系统跟踪的命令:

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 变量中。我将平台工具目录添加到我的 PATH 中,但仍然收到相同的错误。我继续检查导致问题的代码,显然是这个片段:

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没有平台工具目录。所以我删除了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

现在我能够毫无问题地运行系统跟踪脚本:P

此问题

是由 PATH 引起的。 adb 路径应放在另一条路径的末尾。

例如:

$ sudo gedit/etc/environment;

PATH="...:~/softAddr/adt-bundle-linux-x86_64-20140624/sdk/

platform-tools:~/softAddr/adt-bundle-linux-x86_64-20140624/sdk/tools">

不:

PATH="~/softAddr/adt-bundle-linux-x86_64-20140624/sdk/

platform-tools:~/softAddr/adt-bundle-linux-x86_64-20140624/sdk/tools:...">

相关内容

  • 没有找到相关文章

最新更新