0

ディレクトリ「Gerrits/HEAD/wlan」をチェックしようとしている次のコードがあり、ディレクトリが存在するにもかかわらずディレクトリをチェックする条件が失敗し続ける場合、何らかの理由でいくつかの操作を実行しますか? if condition@if (os.path.isdir(SCRIPT_ROOT + "/Gerrits/HEAD/wlan")): 以下に何か問題があります

import os
import subprocess
from subprocess import check_call

SCRIPT_ROOT=subprocess.Popen(['pwd'], stdout=subprocess.PIPE).communicate()[0]
print SCRIPT_ROOT

def main ():
    if (os.path.isdir(SCRIPT_ROOT + "/Gerrits/HEAD/wlan")):
        print "SCRIPT_ROOT/Gerrits/HEAD/wlan already exists,cloning it again to the tip"
        check_call("rm -rf $SCRIPT_ROOT/Gerrits/HEAD/wlan ", shell=True)
        check_call("cd Gerrits/HEAD",shell=True)
    else:
        print "SCRIPT_ROOT/Gerrits/HEAD/wlan doesn't exist,cloning it"
        os.makedirs("Gerrits/HEAD/wlan")
        check_call("cd Gerrits/HEAD",shell=True)
        currdir=subprocess.Popen(['pwd'], stdout=subprocess.PIPE).communicate()[0]

if __name__ == '__main__':
    main()

エラー:-

SCRIPT_ROOT/Gerrits/HEAD/wlan doesn't exist,cloning it
Traceback (most recent call last):
  File "test.py", line 21, in <module>
    main()
  File "test.py", line 16, in main
    os.makedirs("Gerrits/HEAD/wlan")
  File "/usr/lib/python2.6/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 17] File exists: 'Gerrits/HEAD/wlan'
4

2 に答える 2

1

呼び出しに追加.strip()するcommunicate()[0]と、コードには出力に末尾の改行が含まれます。

念のために言っておきますが、Python 2.5 を搭載した Linux ボックスでテストしたばかりのスクリプトです。

import os
import subprocess
from subprocess import check_call

SCRIPT_ROOT=subprocess.Popen(['pwd'], stdout=subprocess.PIPE).communicate()[0].strip()
print SCRIPT_ROOT

def main ():
    if (os.path.isdir(SCRIPT_ROOT + "/Gerrits/HEAD/wlan")):
        print "SCRIPT_ROOT/Gerrits/HEAD/wlan already exists,cloning it again to the tip"
        check_call("rm -rf %s/Gerrits/HEAD/wlan" % SCRIPT_ROOT, shell=True)
        check_call("cd Gerrits/HEAD",shell=True)
    else:
        print "SCRIPT_ROOT/Gerrits/HEAD/wlan doesn't exist,cloning it"
        os.makedirs("Gerrits/HEAD/wlan")
        check_call("cd Gerrits/HEAD",shell=True)
        currdir=subprocess.Popen(['pwd'], stdout=subprocess.PIPE).communicate()[0].strip()

if __name__ == '__main__':
    main()

そしてその出力:

vlazarenko@xx:~$ python o.py 
/media/home/vlazarenko
SCRIPT_ROOT/Gerrits/HEAD/wlan already exists,cloning it again to the tip
于 2012-12-28T01:25:05.307 に答える
1

ここでこのコード行を実行すると:

SCRIPT_ROOT=subprocess.Popen(['pwd'], stdout=subprocess.PIPE).communicate()[0]

...の値にSCRIPT_ROOTは末尾の改行があります

>>> import os
>>> import subprocess
>>> ROOT = subprocess.Popen(['pwd'], stdout=subprocess.PIPE).communicate()[0]
>>> ROOT
'/Users/bgporter/personal\n'

...この呼び出しを行う

if (os.path.isdir(SCRIPT_ROOT + "/Gerrits/HEAD/wlan")):

あなたが望んでいるのとは違う振る舞いをします。その値に対して strip() を呼び出すか、常に現在の作業ディレクトリを取得したい場合は、呼び出すことではるかに簡単に行うことができますos.getcwd()

同様に、関数を使用して、os.removedirs()必要のないディレクトリをシェルアウトする代わりに再帰的に削除できます。

于 2012-12-28T01:25:23.010 に答える