개발을 하다가 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 옵션을 주고 시퀀스대신 문자열로 입력해야한다.
왜 와일드카드가 안되는지는 모르겠다...
'개발' 카테고리의 다른 글
vmware 하드디스크 용량 늘리기 (0) | 2022.04.26 |
---|---|
MySQL create user, grant all privileges (0) | 2022.04.04 |
Anaconda & Jupyter 설치 (0) | 2021.11.05 |
windows10 jupyter notebook 설치 (0) | 2021.11.04 |
[python] __name__ 직접 출력으로 알아보기 (0) | 2021.09.03 |
댓글