파이썬 3 예제이다.


파이썬 2의 subprocess의 결과는 이전에는 string이었지만 python2.6? 또는 python 3부터는 bytes로 리턴한다.

TypeError: startswith first arg must be bytes or a tuple of bytes, not str 이런 에러가 난다면 이슈이다.



이해가 되는 예시이다. 



>>> print(subprocess.Popen("echo hellow", shell=True, stdout=subprocess.PIPE))

b'hellow\n'


>>> print(subprocess.Popen("echo hellow", shell=True, stdout=subprocess.PIPE))

<subprocess.Popen object at 0x10cfb2908>


>>> print(subprocess.Popen("echo hellow", shell=True, stdout=subprocess.PIPE).communicate())

(b'hellow\n', None)


>>> print(subprocess.Popen("echo hellow", shell=True, stdout=subprocess.PIPE, universal_newlines=True).communicate()[0])

hellow



>>> print(subprocess.Popen("echo hellow", shell=True,stdout=subprocess.PIPE).communicate()[0].decode('utf-8').strip())

hellow





마찬가지로..subprocess 모듈의 check_out도 바이트이기에..


status = subprocess.check_output(cmd.split()).rstrip() 코드는




print(subprocess.check_output(cmd.split()).decode('utf-8').rstrip()) 로 변경하면 string으로 리턴한다.







<참고 예시>


import subprocess

import paramiko

cmd = "vagrant ssh-config vagrant2"

p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, universal_newlines=True)

config = paramiko.SSHConfig()

config.parse(p.stdout)

config.lookup("vagrant2")



Posted by 김용환 '김용환'

댓글을 달아 주세요