отправка изображения пути из Java в Python - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь отправить путь изображения из Java в Python, путь отправляется, но когда я хочу открыть его, он хочет открыть

код Java

 public static void main(String[] args) {
      try {
                    // connect to python

                    ServerSocket server = new ServerSocket(8080);
                    Socket client = server.accept();
                    Process p = Runtime.getRuntime().exec("C:\\Python27\\Python C:\\Users\\acer\\Desktop\\py\\a.py");

                    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                    PrintWriter out = new PrintWriter(client.getOutputStream(),true);
                    out.println("C:\Users\acer\Desktop\py\6.bmp");
                    client.close();
                   // System.exit(0);
                } catch (IOException ex) {

                }

    }

код питона

import socket
import random
import os, sys
import numpy
from PIL import Image
HOST = "localhost"
PORT = 8080
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
data = sock.recv(1024)

d=str(data)
img = d
print "d",d
im = Image.open(data)
#print(im.size, im.format)
row, col = im.size
## some code.............

и это дает

d 6.bmp
Traceback (most recent call last):
  File "C:\Users\acer\Desktop\py\a.py", line 18, in <module>
    im = Image.open(data)
  File "C:\Python27\lib\site-packages\PIL\Image.py", line 2634, in open
    fp = builtins.open(filename, "rb")
IOError: [Errno 22] invalid mode ('rb') or filename: '6.bmp\r\n'

Я не знаю, что такое \ r \ n Я просто хочу отправить путь к изображению, чтобы открыть изображение в python

1 Ответ

0 голосов
/ 22 июня 2019

Когда вы пишете данные так:

   out.println("C:\Users\acer\Desktop\py\6.bmp");

вы добавляете разделитель конца строки.

Когда вы читаете данные так:

   data = sock.recv(1024)
   d=str(data)

вы будете включать все данные, которые вы читаете в строку ... включая разделитель строк. И именно поэтому сообщение об ошибке гласит:

   IOError: [Errno 22] invalid mode ('rb') or filename: '6.bmp\r\n'

Видите \r\n? Это разделитель строк.

Вам нужно отделить разделитель строк от имени файла ...

   im = Image.open(data.strip())
...