[python] subprocess- paramiko 예시 (부제 - TypeError: startswith first arg must be bytes or a tuple of bytes, not str 해결하기)
파이썬 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
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")