簡體   English   中英

在python解釋器和腳本文件中運行時的結果不同

[英]Different results when running in python interpreter vs. script file

我試圖在我的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: ''

在主函數中這樣調用它:

if block_dict[block][0]=='0':
    tag = get_tag(folder)

其中“文件夾”先前已定義為字符串。

請注意,我們使用的是python 2.6,因此很遺憾,我無法使用模塊check_output。

顯然p1.communicate()[0].strip('\\n')返回一個空字符串。 您是否真的像示例中那樣使用硬編碼的值"/path/to/directory"

您是否嘗試過使用glob模塊而不是find方法?

import glob
glob.glob("/path/to/directory/*/SomeDir/path/*")

您可以使用**查看多個目錄:

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

它將與/ path / to / your / SomeDir / path / file匹配。

檢查p1.communicate()[0] 它可能是空字符串。

. "%s.*" % part_of_foldername似乎是原因。

UPDATE

發現錯別字: comminucate -> comminucate


def get_tag(part_of_foldername):
    p1 = subprocess.Popen(["find", "/path/to/directory", "-maxdepth", "1", "-name", "*%s*" % part_of_foldername, "-type", "d"], stdout=subprocess.PIPE)
    out, err = p1.communicate()
    directory = out.split('\n')[0]
    p1.wait()
    if directory:
        os.chdir(directory)
        p2 = subprocess.Popen(["grep", "STUFF_", ".hgtags"], stdout=subprocess.PIPE)
        out, err = p2.communicate()
        p2.wait()
        return out.rstrip('\n')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM