popen에 대한 작업 디렉토리를 지정하는 방법


187

파이썬에서 실행중인 명령 디렉토리를 지정하는 방법이 subprocess.Popen()있습니까?

예를 들면 다음과 같습니다.

Popen('c:\mytool\tool.exe', workingdir='d:\test\local')

내 파이썬 스크립트는 C:\programs\python

C:\mytool\tool.exe디렉토리에서 실행할 수 D:\test\local있습니까?

하위 프로세스의 작업 디렉토리를 어떻게 설정합니까?


2
subprocess.call 그냥 subprocess.Popen 이상 얇은 래퍼, 나는 간단한 경우 : 기억으로, 적어도 훨씬 더 나은 스틱 subprocess.call뿐만 아니라는 popen의 모든 인수이 래퍼 거래 있음을 유의하십시오
shabunc을

답변:


270

subprocess.Popen cwd현재 작업 디렉토리를 설정하기 위해 인수취합니다 . 백 슬래시 ( 'd:\\test\\local') 를 이스케이프하거나 백 r'd:\test\local'슬래시가 Python에서 이스케이프 시퀀스로 해석되지 않도록 사용 하려고 할 수도 있습니다 . 당신이 그것을 작성하는 방식으로, \t부분은로 번역됩니다 tab.

따라서 새 줄은 다음과 같아야합니다.

subprocess.Popen(r'c:\mytool\tool.exe', cwd=r'd:\test\local')

Python 스크립트 경로를 cwd로 사용 import os하고 다음을 사용하여 cwd를 정의하십시오.

os.path.dirname(os.path.realpath(__file__)) 

2
인수에 Shell = True를 추가하면 cwd 설정에도 어떤 영향이 있습니까?
T. Stone

3
@티. Stone : 독립형 실행 파일의 경우 exe가 셸의 일부 환경 변수에 의존하지 않는 한 아무것도 변경하지 않아야합니다. 그러나, 함께 shell=False, 당신과 같은 내장 쉘을 사용할 수 없습니다 cd즉, 쉘 리눅스에서 두 가지 방법이 시도 :subprocess.Popen("cd /tmp; pwd")
마크 Rushakoff

12
파이썬 3에서 적어도, 당신은 Windows 시스템의 경우에도 백 슬래시를 사용하지 않아도, 난 그냥했다 subprocess.call(["C:/Users/Bob/Some.exe"], cwd="C:/Users/Jane/")및 그것을 잘 작동합니다
mgrandi

7
작업 디렉토리는 절대 경로 여야합니까?
DXsmiley

10
subprocess.check_output ()에서도 작동합니다. 감사 !
Samuel Dauzon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.