![](/img/trans.png)
[英]Python os and gob: Different results when executing a script on a single file vs. multiple files
[英]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.