[python] subprocess- paramiko 예시 (부제 - TypeError: startswith first arg must be bytes or a tuple of bytes, not str 해결하기)
python 2018. 12. 28. 22:43파이썬 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")
'python' 카테고리의 다른 글
구글에서 만든 파이썬 CLI 예시 (0) | 2019.04.23 |
---|---|
[flask] request의 get_json(force=True) 추가 (0) | 2019.01.24 |
[python] pre-commit 추가하기 (0) | 2018.11.09 |
flask에서 개발할 때 jsonify, json.dump 없이 json 응답 보내기 (0) | 2018.11.08 |
python으로 해결하는 JSONP 파싱 예시 (0) | 2018.11.06 |