[์ ๋ณด] ํ์ด์ฌ subprocess ์ค๋ช ๋ฐ ์์
Python์์ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์ ์ดํ๊ธฐ ์ํด์๋ subprocess ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค. subprocess ๋ชจ๋์ ์ธ๋ถ ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ๊ทธ ์ถ๋ ฅ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ค์์ Python์์ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์๊ฒ ๋ช
๋ น์ ์ ์ดํ๋ ์์ ์ฝ๋์
๋๋ค.
import subprocess
# ์คํํ ๋ช
๋ น์ด
cmd = 'ls -al'
# shell=True๋ก ์ง์ ํ์ฌ ์
ธ ๋ช
๋ น์ด ์คํ
result = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE)
# ์คํ ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(result.stdout.decode())
์ ์ฝ๋์์๋ subprocess.run() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ls -al ๋ช ๋ น์ด๋ฅผ ์คํํ๊ณ , ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ result์ ์ ์ฅํฉ๋๋ค. stdout=subprocess.PIPE๋ฅผ ์ง์ ํ์ฌ ๋ช ๋ น์ด์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ด์ฌ์์ ์ฌ์ฉํ ์ ์๋ ํํ๋ก ๊ฐ์ ธ์ต๋๋ค. result.stdout์๋ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ดํธ(byte) ํํ๋ก ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก, decode() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด๋ก ๋ณํํฉ๋๋ค.
์ ์์ ์ฝ๋์์๋ ์ ธ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ์์ง๋ง, subprocess ๋ชจ๋์ ์ฌ์ฉํ๋ฉด Python ์คํฌ๋ฆฝํธ์์ ์ง์ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์คํํ ์๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ shell=True๋ฅผ ์ง์ ํ์ง ์์ต๋๋ค.
import subprocess
# ์คํํ ๋ช
๋ น์ด
cmd = ['echo', 'Hello, world!']
# ๋ช
๋ น์ด ์คํ
result = subprocess.run(cmd, stdout=subprocess.PIPE)
# ์คํ ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(result.stdout.decode())
์ ์ฝ๋์์๋ subprocess.run() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ echo ๋ช ๋ น์ด๋ฅผ ์คํํ๊ณ , ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ result์ ์ ์ฅํฉ๋๋ค. stdout=subprocess.PIPE๋ฅผ ์ง์ ํ์ฌ ๋ช ๋ น์ด์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ด์ฌ์์ ์ฌ์ฉํ ์ ์๋ ํํ๋ก ๊ฐ์ ธ์ต๋๋ค. result.stdout์๋ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ดํธ(byte) ํํ๋ก ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก, decode() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด๋ก ๋ณํํฉ๋๋ค.
์ด ์ธ์๋ subprocess ๋ชจ๋์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก, ํ์์ ๋ฐ๋ผ์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.