programing

팝업을 위한 작업 디렉토리를 지정하려면 어떻게 해야 합니까?

projobs 2022. 9. 22. 22:15
반응형

팝업을 위한 작업 디렉토리를 지정하려면 어떻게 해야 합니까?

Python의 명령어 실행 디렉토리를 지정할 수 있는 방법이 있습니까?subprocess.Popen()?

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

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

Python 스크립트는 다음 위치에 있습니다.C:\programs\python

실행 가능C:\mytool\tool.exe전화번호부에D:\test\local?

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

subprocess.Popen Current Working Directory를 설정하기 위해 인수를 사용합니다.백슬래시를 이스케이프하는 것도 좋습니다)'d:\\test\\local'), 또는 를 사용합니다.r'd:\test\local'Python은 백슬래시를 이스케이프 시퀀스로 해석하지 않습니다.당신이 쓰는 방식으로는\t부품이 로 변환됩니다.

새로운 행은 다음과 같습니다.

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

Python 스크립트 경로를 cwd로 사용하려면import os다음 명령을 사용하여 cwd를 정의합니다.

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

다른 방법은 간단히 이것을 하는 것입니다.

cwd = os.getcwd()
os.chdir('c:\some\directory')
subprocess.Popen('tool.exe')
os.chdir(cwd)

이 솔루션은 툴의 위치가 다음과 같은 경우 등 상대적인 경로에 의존하고 싶은 경우에 사용할 수 있습니다.c:\some\directory\tool.exe.cwd키워드 인수Popen허락하지 않을 거야스크립트/툴에 따라서는, 기동시에 지정된 디렉토리에 있는 것에 의존할 수 있습니다.이 코드의 노이즈를 경감하기 위해서, 디렉토리 변경에 관한 로직을 「비즈니스 로직」으로부터 떼어내, 데코레이터를 사용할 수 있습니다.

def invoke_at(path: str):
    def parameterized(func):
        def wrapper(*args, **kwargs):
            cwd = os.getcwd()
            os.chdir(path)

            try:
                ret = func(*args, **kwargs)
            finally:
                os.chdir(cwd)

            return ret

        return wrapper

    return parameterized            

그런 다음 이러한 장식기를 다음과 같은 방법으로 사용할 수 있습니다.

@invoke_at(r'c:\some\directory')
def start_the_tool():
    subprocess.Popen('tool.exe')

언급URL : https://stackoverflow.com/questions/1685157/how-can-i-specify-working-directory-for-popen

반응형