在python解释器和脚本文件中运行时的不同结果

在python解释器和脚本文件中运行时的不同结果,python,bash,grep,subprocess,Python,Bash,Grep,Subprocess,我试图在python脚本中使用bash函数来定位一个特定的目录,然后在该目录中grep一个给定的文件。问题是我只有一部分目录名,所以我需要使用bash函数find来获取其余的目录名(名称是唯一的,并且只返回一个文件夹) 我目前掌握的守则如下: def get_tag(part_of_foldername): import subprocess import os p1 = subprocess.Popen(["find", "/path/to/directory", "-

我试图在python脚本中使用bash函数来定位一个特定的目录,然后在该目录中grep一个给定的文件。问题是我只有一部分目录名,所以我需要使用bash函数find来获取其余的目录名(名称是唯一的,并且只返回一个文件夹)

我目前掌握的守则如下:

def get_tag(part_of_foldername):
    import subprocess
    import os
    p1 = subprocess.Popen(["find", "/path/to/directory", "-maxdepth", "1", "-name", "%s.*" % part_of_foldername, "-type", "d"], stdout=subprocess.PIPE)
    directory = p1.communicate()[0].strip('\n')
    os.chdir(directory)
    p2 = subprocess.Popen(["grep", "STUFF_", ".hgtags"], stdout=subprocess.PIPE)
    tag = p2.comminucate()[0].strip('\n')
    return tag
Traceback (most recent call last):
File "./integration.py", line 64, in <module>
    main()  
File "./integration.py", line 48, in main
    tag = get_tag(folder)
File "./integration.py", line 9, in get_date
    os.chdir(directory)
OSError: [Errno 2] No such file or directory: ''
这才是真正奇怪的。当您将代码逐行输入interactive时,此代码有效,但在通过脚本运行时则无效。当您将脚本文件导入interactive并调用该函数时,它也起作用,但当主函数调用它时,它不起作用。我直接运行脚本得到的回溯如下:

def get_tag(part_of_foldername):
    import subprocess
    import os
    p1 = subprocess.Popen(["find", "/path/to/directory", "-maxdepth", "1", "-name", "%s.*" % part_of_foldername, "-type", "d"], stdout=subprocess.PIPE)
    directory = p1.communicate()[0].strip('\n')
    os.chdir(directory)
    p2 = subprocess.Popen(["grep", "STUFF_", ".hgtags"], stdout=subprocess.PIPE)
    tag = p2.comminucate()[0].strip('\n')
    return tag
Traceback (most recent call last):
File "./integration.py", line 64, in <module>
    main()  
File "./integration.py", line 48, in main
    tag = get_tag(folder)
File "./integration.py", line 9, in get_date
    os.chdir(directory)
OSError: [Errno 2] No such file or directory: ''
“文件夹”以前定义为字符串


请注意,我们使用的是python 2.6,因此很遗憾,我无法使用模块check\u输出。

显然
p1.communicate()[0]。strip('\n')
返回一个空字符串。您是否真的像示例中那样使用硬编码值
“/path/to/directory”

您是否尝试过使用模块而不是查找

import glob
glob.glob("/path/to/directory/*/SomeDir/path/*")
您可以使用**查看多个目录:

glob.glob("/path/**/SomeDir/path/*")

这将匹配/path/到/your/SomeDir/path/文件。

检查
p1.communicate()[0]
的结果。它可能是空字符串

%s.*%中,foldername的部分似乎是原因

更新

发现输入错误:
comminucate
->
comminucate



是的,我看到它返回空字符串,但它在交互模式下不返回空字符串。如果它是/path/blah/foldername.1234,而我只知道该目录的foldername部分,那该怎么办?这个模块完美地替换了我代码中的查找,glob.glob(“/path/to/dir/%s*”%part\u of\u foldername)扩展到正确的路径。谢谢你!!!不幸的是,打字错误使我无法修改原始代码:(