Python에서 Shell 명령어 실행 및 리턴 값 받기

By JS | Last updated: July 05, 2021

Python에서 리눅스 쉘 커맨드 실행 및 리턴 값을 받는 방법을 소개합니다. 또한 Shell 스크립트를 실행하는 방법을 소개합니다.

Shell Command 실행 (1) : os.system

os.system()에 전달된 명령어를 실행합니다. 결과는 콘솔에 출력됩니다.

import os

os.system('ls -l')

Output:

/usr/bin/python3.8 /home/mjs/IdeaProjects/python-ex/run_shell.py
total 28
-rw-rw-r-- 1 mjs mjs  255  7월  4 16:01 comma.py
-rw-rw-r-- 1 mjs mjs  124  7월  3 16:14 file.log

Shell Command 실행 (2) : os.popen

os.popen()에 전달된 명령어를 실행합니다. 결과는 콘솔에 출력되지 않고, stream을 통해서 결과를 받을 수 있습니다.

import os

stream = os.popen('ls -l')
output = stream.read()
print(output)

Output:

/usr/bin/python3.8 /home/mjs/IdeaProjects/python-ex/run_shell.py
total 28
-rw-rw-r-- 1 mjs mjs  255  7월  4 16:01 comma.py
-rw-rw-r-- 1 mjs mjs  124  7월  3 16:14 file.log
...

Shell Command 실행 (3) : subprocess

subprocess으로 다음과 같이 쉘 커맨드를 실행할 수 있습니다. 결과는 콘솔에 출력됩니다.

import subprocess

subprocess.run(["ls", "-l"])

Output:

/usr/bin/python3.8 /home/mjs/IdeaProjects/python-ex/run_shell.py
total 28
-rw-rw-r-- 1 mjs mjs  255  7월  4 16:01 comma.py
-rw-rw-r-- 1 mjs mjs  124  7월  3 16:14 file.log
...

실행 결과 리턴 받기

아래 코드는 명령어 실행 결과를 콘솔에 출력하지 않고 리턴받습니다. result.stdout이 결과에 대한 문자열입니다.

import subprocess

result = subprocess.run(["ls", "-l"], stdout=subprocess.PIPE, text=True)
print(result.stdout)

Output:

/usr/bin/python3.8 /home/mjs/IdeaProjects/python-ex/run_shell.py
total 28
-rw-rw-r-- 1 mjs mjs  255  7월  4 16:01 comma.py
-rw-rw-r-- 1 mjs mjs  124  7월  3 16:14 file.log
...

명령어를 하나의 문자열에 입력 및 리스트로 변환

위의 예제에서는 명령어를 실행할 때, 번거롭게도 ["ls", "-l"]처럼, 단어로 분리된 리스트를 인자로 전달하였습니다.

명령어를 문자열 하나에 입력하고 split(' ')를 이용하여 리스트로 만들 수 있습니다. 그 리스트를 run()에 전달하면 간편히 명령어를 실행할 수 있습니다.

import subprocess

command = "ls -l"
result = subprocess.run(command.split(' '), stdout=subprocess.PIPE, text=True)
print(result.stdout)

콘솔에 결과 출력하지 않도록 설정

stdout을 subprocess.DEVNULL으로 설정하면 Output이 출력되지 않습니다.

import subprocess

subprocess.run(["ls", "-l"], stdout=subprocess.DEVNULL)

Shell Script 실행

다음과 같이 인자로 쉘 스크립트 파일 경로와 arguments를 전달하면 스크립트가 실행됩니다.

import subprocess

subprocess.run(["/tmp/test.sh", "arguments"], shell=True)

Output:

/usr/bin/python3.8 /home/mjs/IdeaProjects/python-ex/run_shell.py
total 28
-rw-rw-r-- 1 mjs mjs  255  7월  4 16:01 comma.py
-rw-rw-r-- 1 mjs mjs  124  7월  3 16:14 file.log
...
# /tmp/test.sh

echo "Hello, Python"

Related Posts

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha