我目前正在尝试使用以下python代码来获取目录中的文件数。
output = subprocess.check_output(["adb", "shell", "cd /sdcard/Dir/Subdir", "find . -type f | wc -l"])
print output
但是,我得到了输出:
/system/bin/sh: cd: too many arguments
0
但如果我在命令提示符下输入以下内容,我会得到所需的结果(14个文件):
adb shell
cd /sdcard/Dir/Subdir
find . -type f | wc -l
知道如何将命令行代码集成到python中吗?
答案 0 :(得分:2)
如果您将参数传递给列表中的check_output
(不在字符串中),那么如果您传递带空格的参数,则会引用它们。
但这不是主要问题。
您正在adb shell
中运行check_output
,但是下一个命令应该通过适当的命令行或shell的标准输入传递。
您可以尝试以下(未经测试):
output = subprocess.check_output(["adb", "shell", "cd /sdcard/Dir/Subdir", "&&","find . -type f | wc -l"])
(&&
告诉shell将cd
链接到find
,而不是将所有参数传递给cd
)
或以交互方式运行您的shell,并传递命令,就像您键入它们一样(使用Popen
):
p = subprocess.Popen(["adb", "shell"],stdin=subprocess.PIPE)
out,err = p.communicate("cd /sdcard/Dir/Subdir\nfind . -type f | wc -l\n")