본문 바로가기
개발

python subprocess.Popen wildcard 이슈

by meanjung 2022. 2. 11.

개발을 하다가 os.system으로 쉘 명령어를 실행해야할 일이 생겼다.

처음엔 os.system("cp /path/to/dir/* /path/to/some/where")으로 실행했다. 

그런데 python 파일을 실행시킨 터미널에 실행 결과가 출력되길래 다른 방법을 검색했다.

찾은 방법은 subprocess.Popen이었다. 

그래서 그대로 넣었더니

subprocess.Popen("cp /path/to/dir/* /path/to/some/where")는 동작을 하지 않았다.

사용법이 틀렸구나, ["cp", "/path/to/dir/*", "/path/to/some/where"]으로 바꿔 입력했다. 여전히 동작하지 않았다.

 

subprocess에서 문자열로 입력할 경우 ls, pwd 같은 단일 명령어만 가능하고, cat a.txt 같이 argument가 붙는 것은 동작하지 않는다.

만약 cat a.txt를 문자열로 입력하고 싶은 경우, shell=True 옵션을 주면 된다. 하지만 보안에 취약할 것이다.

 

문자열말고, 시퀀스로 주는 방법이 있다. 

 

시퀀스로 주면 /bin/sh -c args[0] args[1].. 이렇게 실행된다. 

 

근데 이때 와일드카드는 먹히지 않는다. 와일드카드를 동작하게 하려면 shell=True 옵션을 주고 시퀀스대신 문자열로 입력해야한다. 

왜 와일드카드가 안되는지는 모르겠다... 

댓글