python检查输出查找命令不起作用

时间:2015-12-11 15:48:40

标签: python find subprocess raspberry-pi2

我正在尝试从插入raspberry pi的usb闪存驱动器中找到名为“config.txt”的文件的路径。使用的物理驱动器可能并不总是相同,因此路径可能并不总是相同。所以我用

'find /media/pi/*/config.txt' 

找到终端中的路径,工作得很好。 现在我去使用check_output并获得一串巨大的路径。

from subprocess import check_output
cmd = ['find', '/media/pi/*/config.txt']
out = check_output(cmd,shell=True) 

根据https://docs.python.org/2/library/subprocess.html

,我将shell设置为True以允许使用通配符

结果是:

'.\n./.Xauthority\n./.xsession-errors\n./Public\n./.dmrc\n./Downloads\n./test.sh\n./.idlerc\n./.idlerc/recent-files.lst\n./.idlerc/breakpoints.lst\n./.asoundrc\n./.bash_logout\n./.profile\n./Templates\n./Music\n./.bash_history\n./Videos\n./.local\n./.local/share\n./.local/share/gvfs-metadata\n./.local/share/gvfs-metadata/home\n./.local/share/gvfs-metadata/home-d6050e94.log\n./.local/share/applications\n./.local/share/recently-used.xbel\n./.local/share/Trash\n.....

它会持续一段时间。 我试着查看其他几个类似的问题,包括下面的链接,但没有运气。

Store output of subprocess.Popen call in a string

2 个答案:

答案 0 :(得分:1)

如果要使用通配符,则需要传递单个字符串,就像在shell中一样:

from subprocess import check_output
cmd = 'find /media/pi/*/config.txt'
out = check_output(cmd,shell=True)

您根本不需要子流程,glob会做您想做的事情:

from glob import glob 
files =  glob('/media/pi/*/config.txt')

答案 1 :(得分:0)

由于您使用shell=True,因此可以使用以下内容:

from subprocess import check_output
cmd = 'cd /media/pi && find . -iname config.txt'
out = check_output(cmd, shell=True) 

尽可能避免使用通配符,只需在搜索目标文件之前更改当前的工作目录。