新手区 python shell 下如何进行 SD 目录下文件或者文件夹的存在判断

guji · 2015年03月10日 · 最后由 五音 回复于 2015年03月11日 · 3138 次阅读
# -*- coding: utf-8 -*-
import os
import time
import sys
import subprocess
from subprocess import call


os.popen('adb shell mkdir -p /mnt/sdcard/Android/data/xxxx/APKData/USER/RW/SIM')
devices_exist=os.popen('adb devices').read()

path=subprocess.Popen('adb shell cd sdcard/Android/data/xxxx/APKData/USER/RW/SIM')

if path:
    print(1)
else:
    print(0)

教一个问题:

想使用 python shell 进行 SD 目录下的文件或者文件夹是否存在的判断:

我想确认在 data 目录下的这个数据文件生成了
os.system('adb shell ls -l sdcard/Android/data/xxx/xxx)

最后判断的结果是这个文件夹不存在,不知道是不是我的命令写错了,还请指导

共收到 10 条回复 时间 点赞

这个只是执行 ls 指令吧?
要把判断结果的代码贴出来

guji #2 · 2015年03月11日 Author

@wenchao

是这样的,比如一个最简单的判断,总是返回的是 False 的结果,但是这个文件夹是存在的,就是想是否有其他的方法可以判断,希望指教

#2 楼 @lovelorn0327 我不太理解你说的最简单判断,是怎么判断的?最好能把代码贴上来。

  1. 假如你用上面代码直接在 if 里面判断,那你必须知道 shell 里面命令结果正确,反馈的值是 0
  2. 如果你知道上面那条,还有就是要注意,adb shell 后面加任何命令,执行结果返回值与后面加的命令无关,只受 adb shell 执行的结果成功失败有影响
guji #4 · 2015年03月11日 Author

@wenchao

非常抱歉。不写出来的确是很难理解。
我重新整理下问题:

1:adb shell 返回值是正确的话显示 0,我一直一起 True:1 False:0,看来现在 True:0 False:1
这样理解对吧,因为以前我的确没有了解过。

2.我就是想怎么判断一下 SIM 文件夹是否存在,这样写可以吗
path=subprocess.Popen('adb shell cd sdcard/Android/data/USER/RW/SIM')

还请指教,再次感谢

#4 楼 @lovelorn0327 贴代码的时候要用代码块,否则管理员是会吐槽的
第一个问题基本正确,补充一下返回非 0 的结果,就是 False,标准的 Linux 命令不同的错误会返回不同的返回值
第二个问题,你可以实际执行一下就好了,可以还是不可以。另外在使用 API 的时候最好查阅一下官网的 API 文档,了解,这个 API 需要传入什么参数,返回的是什么?

guji #6 · 2015年03月11日 Author

@wenchao感谢指导,我知道了,下次贴代码块,不好意思,我在去看下,感谢您

#6 楼 @lovelorn0327 哪有下次,现在就改啊。又不是不能修改。

guji #8 · 2015年03月11日 Author

@lihuazhang
不好意思没有下次,已经修正

#!/usr/bin/python                                                               
# -*- coding: utf-8 -*-

# 未使用的包不需要导入
import os

# 忽略检查设备存在的代码,默认设备存在,检查代码自己加
path = os.popen('adb shell ls sdcard/test.html').read().strip()
# 成员运算符(in):如果在指定的序列中找到值返回True,否则返回False。
'No such file or directory' in path

比较土的方法

guji #10 · 2015年03月11日 Author

@wenchao谢谢。学到了。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册