2017년 11월 23일 목요일

python에서 Linux shell command 사용하기





파이썬에서 Linux의 shell command를 사용하는 방법이다.
이를 위해서는 파이썬의 os모듈과 sys모듈을 import해야 한다.
다음은 코드 조각이다.

import os
import sys

os.system('cat qqq.txt > /dev/ttyPS0')

위의 소스코드는 현재 디렉토리에 있는 qqq.txt라는 파일의 내용을 ttyPS0라는 장치(리눅스에서는 장치도 file로 취급)로 전송하는 기능을 수행한다.
여기서 ttyPS0는 현재 디바이스가 가지고 있는 Serial port이다. 만일 현재 디바이스가 임베디드 장비이고 이 장비의 USB UART에 USB 케이블로 PC와 연결되어 있다면 위의 코드를 실행하고 PC쪽에서 Serial 포트의 데이터를 읽는 프로그램을 만들면 임베디드 장비의 qqq.txt의 내용을 PC에서 수신할수 있게 될것이다.

혹은 반대로 하면

os.system('cat /dev/ttyPS0')

이상과 같이 하면 현재의 장비의 Serial port로 들어오는 데이터를 터미널 창에 표시해주는 리눅스의 shell command를 python에서 사용하는 방법이었다. 이 경우는 PC에서 Serial port로 전송하는 데이터를 임베디드 장비에서 수신할수 있는 쉘 명령어를 python에서 사용한 방식이 되겠다.

만일 shell command의 내용을 변수에 저장하고자 한다면 subprocess라는 것을 import해 주어야 한다.

import subprocess

aaa = subprocess.check_output(['cat', 'kkk.txt'])
print aaa

와 같이 하면 kkk.txt의 내용을 변수 aaa에 저장했다가 이것을 출력하는 코드가 되겠다.

혹은 

mylist = subprocess.check_output(['ls', '-l'])
print mylist

이렇게하면 현재 디렉토리에 있는 파일 목록을 변수 mylist에 담고 그것을 출력하는 기능을 수행하는 코드이다.

혹은 보다 간단한 방법은 shell 옵션을 True로 하면 터미널 창에서 입력하는 형태 그대로의 command를 사용할수 있다.

pid = subprocess.check_output('ps -elf | grep CRSViewer.py', shell=True)


이렇게 하면 CRSViewer.py의 실행 process id를 나타내 준다.


댓글 없음:

댓글 쓰기