Pythonスクリプト内でbash関数を使用して、特定のディレクトリを見つけて、ディレクトリ内の特定のファイルをgrepできるようにしようとしています。問題は、ディレクトリ名の一部しか持っていないことです。そのため、bash 関数 find を使用して残りのディレクトリ名を取得する必要があります (名前は一意であり、1 つのフォルダーのみが返されます)。
私がこれまでに持っているコードは次のとおりです。
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 を使用できないことに注意してください。