gpt4 book ai didi

python - 在Python子进程中查找返回1

转载 作者:行者123 更新时间:2023-12-01 05:48:02 26 4
gpt4 key购买 nike

我需要使用以下 GNU find 命令搜索目录的内容:

find path -type f -name file1 -o -name file2 -o -name file3

当我在 Linux shell 中执行此命令时,find 命令返回,退出代码为 0。当我在子进程调用中执行相同的命令时,find 命令返回返回退出代码 1:

import subprocess  
import shlex
findcmd = "/depot/findutils/bin/find /remote/scratch/results -type f -name 'QUEUED' -o -name 'run.pid' -o -name 'PID'"
try:
output = subprocess.check_output(shlex.split(findcmd))
except subprocess.CalledProcessError, cpe:
print cpe.output
raise cpe

输出:

Traceback (most recent call last):
File "./getaverages.py", line 63, in <module>
raise cpe
subprocess.CalledProcessError: Command '['/depot/findutils/bin/find', '/remote/scratch/results', '-type', 'f', '-name', 'QUEUED', '-o', '-name', 'run.pid', '-o', '-name', 'PID']' returned non-zero exit status 1

奇怪的是,CalledProcessError 对象输出属性与我在 Linux shell 中运行 find 时得到的输出完全相同(返回的输出大约有 15K行)。我还尝试设置 bufsize=-1 但这没有帮助。

对于理解这种行为有什么建议吗?

我使用的是 Python 2.7.2,find 版本是 4.2.20。

最佳答案

尽管您发现了问题,但对于您想要实现的如此简单的事情,我不会shell-out,而是使用os.walk:

import os, os.path
search = 'file1 file2 file3'.split()
for root, dirs, files in os.walk('/path'):
for f in filter(lambda x: x in search, files):
# do something here
fn = os.path.join(root, f)
print 'FOUND', fn

关于python - 在Python子进程中查找返回1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15430586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com