2012-08-23 2 views
0

그래서 특정 폴더에 포함 된 파일 이름을 기반으로 디렉토리를 만드는 간단한 스크립트를 만들고 싶습니다.OS에 명령 전달 : 여기에 무슨 문제가 있습니까?

내 방법은 다음과 같습니다

def make_new_folders(filenames, destination): 
    """ 
    Take a list of presets and create new directories using mkdir 
    """ 
    for filename in filenames: 
     path = '"%s/%s/"' % (destination, filename) 
     subprocess.call(["mkdir", path]) 

을 내가 명령이 동작하지 않습니다 어떤 이유로.

mkdir: "/Users/soundteam/Desktop/PlayGround/Test Folder: No such file or directory 

의 '경로'변수 결과 인쇄 : 나는 "테스트 폴더"라는 이름의 파일에 전달하면

, 난 같은 오류가 " 을/사용자/soundteam/데스크탑/놀이터/테스트 폴더/"

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

+1

'/ Users/soundteam/Desktop/PlayGround' 폴더가없는 경우에는 mkdir에 -p 옵션을 사용하십시오. – avasal

+0

부수적으로,'os.mkdir' 또는'os.makedirs'보다는 외부 mkdir 명령을 호출합니다. – geirha

답변

4

큰 따옴표가 필요하지 않습니다. subprocess은 매개 변수를 프로세스에 직접 전달하므로 셸로 파싱 할 준비를 할 필요가 없습니다. 또한 후행 슬래시를 필요로하지 않으며, 경로 구성 요소를 결합하는 os.path.join 사용해야합니다

path = os.path.join(destination, filename) 

편집 : 당신은 하위 프로세스를 필요로하지 않는다는 것을 설명 파비안의 대답은, @ 받아 들여야을 전혀 (나는 그것을 알았다).

7

먼저 교차 경로로 작동하기 때문에 경로 파트를 서로 붙이려면 os.path.join()을 사용해야합니다.

또한 os.mkdir 또는 os.makedirs과 같은 기본 명령이 있습니다 (재귀 적이기 때문에 정말 멋지다). 폴더를 만들 수 있습니다. 하위 프로세스를 만드는 것은 비용이 많이 들며,이 경우에는 좋은 생각이 아닙니다.

예제에서 큰 따옴표 ("destination/filename")를 하위 프로세스로 전달하고 있으므로이 작업을 수행하지 않아도됩니다. 파일이나 폴더 이름에 공백을 사용하면 터미널에서 큰 따옴표가 필요합니다. 하위 프로세스는이를 처리합니다.

관련 문제