2011-09-05 9 views
0

간단한 파이썬 스크립트를 사용하여 바탕 화면에서 일련의 pdf 파일 이름을 바꾸려고합니다. 나는 어떻게 든 성공하지 못한다. 현재 코드 :Python 명령 줄 실행

import os,subprocess 
path = "/Users/armed/Desktop/" 
for file in os.listdir(path) 
    command = ['mv', '*.pdf' , 'test.pdf'] // mv Command to rename files to test.pdf 
    subprocess.call(command) 

출력 코드는 1이고 파일 이름은 변경되지 않습니다. 동일한 명령은 터미널에서 실행될 때 작동합니다. 나는 Mac을 사용하고있다. (어떤 식 으로든 도움이된다면)

+0

해당 디렉토리에 몇 개의 PDF 파일이 있습니까? 그 쉘 명령이 둘 이상이면 실패합니다. – Keith

+0

귀하의 권리. 내가 명령을 시험 할 당시에는 오직 한개의 pdf 만있었습니다. 그러나 이름 바꾸기가 둘 이상 실패하고 모든 pdfs를 다른 디렉토리로 옮기기 시작한다는 것을 깨달았습니다. – Amritha

답변

6

같은 명령이 터미널에서 실행될 때 작동한다.

이 아닌 동일한 명령을 제외하고는입니다.

'mv' '*.pdf' 'test.pdf' 

을하지만 당신은 그것을 입력 할 때 그것은 실행 : 코드가 실행되고

'mv' *.pdf 'test.pdf' 

의 차이는 쉘이 mv을 실행하기 전에 * 와일드 카드를 globs와 있다는 것입니다. glob 모듈을 사용하여 동작을 시뮬레이션 할 수 있습니다.

+0

빠른 답장을 보내 주셔서 감사합니다! 그래서 glob 모듈을 사용하여이 코드를 작동시켜야합니까? 나는 문서를 찾았지만 그것을 이해하지 못한다. 서브 프로세스 호출 내에서 glob.glob (*. pdf)를 지정해야합니까? – Amritha

+1

'glob.glob()'는리스트를 반환합니다. 'subprocess.call()'에 건네주는리스트에 그것을 통합 할 필요가 있습니다. –

+0

고마워요! 그것은 일했다 :) – Amritha

1

파이썬은 기본적으로 문자열에서 쉘 와일드 카드를 확장하지 않습니다. 하위 프로세스 없이도이 작업을 수행 할 수 있습니다. 그러나 귀하의 코드는 마지막 PDF 파일을 제외한 모든 pdf 파일을 잃게됩니다.

from glob import glob 
import os 
path = "/Users/armed/Desktop/" 
os.chdir(path) 
for filename in glob("*.pdf"): 
    os.rename(filename, "test.pdf") 

그러나 나는 그것이 당신이 정말로 원하는 것이 아니라고 확신합니다. 더 나은 목적지 이름이 필요합니다.

+0

나는 실제로 파이썬을 통해 명령 행 명령을 실행하는 방법을 찾고있다. 어쨌든 고마워! – Amritha