내가 사용하여 수행 subprocess.Popen
:
이 내 디렉토리 구조입니다 : 다음 코드에서
.
├── main.py
├── src.jpg
└── test1.py
, 나는 src.jpg의 크기를 변경하고 새로운 파일로 저장 src.thumbnail
이라고합니다.
이것은 main.py
입니다. main.py
에서 입력 스트림 (원본 그림의 스트림)과 출력 스트림 (대상 그림의 스트림)으로 두 개의 파일을 엽니 다.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import subprocess
def main():
# args are python interpreter and python file
args = ["/home/yundongx/.virtualenvs/read/bin/python", "/tmp/img/test1.py"]
with open("src.thumbnail", "w+b") as outstream, \
open("src.jpg", "rb") as instream:
ps = subprocess.Popen(args, stdin=instream, stdout=outstream)
ps.wait()
if __name__ == '__main__':
main()
그리고 이것은 test1.py
에서 test1.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from PIL import Image
import sys
import io
size = (128, 128)
def main():
try:
im = Image.open(io.BytesIO(sys.stdin.buffer.read()))
im.thumbnail(size)
output = io.BytesIO()
im.save(output, "JPEG")
sys.stdout.buffer.write(output.getvalue())
except IOError as e:
sys.stderr.write("Cannot read the data\n")
raise e
if __name__ == '__main__':
main()
이며,이 프로그램에 저장합니다 (IMG 데이터를 기록, (당신이 BytesIO로 변환 할 필요가) 표준 입력에서 IMG 데이터를 읽고 BytesIO)를 처리 한 후 표준 출력으로 보냅니다.
'test1.py'는 파이썬 스크립트이므로'subprocess'로 호출하는 이유는 무엇입니까? 왜 그것을 가져 오지 않고 직접 함수를 사용합니까? (현재 함수/클래스를 직접 사용할 수 있도록 작성되지 않은 경우 다시 작성해야합니다.) – John1024
@ john1024 실제로 문제는 우리가 파일의 두 라이브러리에서 다른 버전을 사용하고 있으므로 나는 하위 프로세스를 만듭니다. – kkk
다른 수단을 통해 이미지를 전달하는 것이 더 나을 것입니다. 임시 파일, 소켓, 프로세스 인수보다는 파이프 일 수 있습니다. – SuperSaiyan