我正在尝试将图像路径从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:UsersacerDesktoppy6.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:UsersacerDesktoppya.py", line 18, in <module>
im = Image.open(data)
File "C:Python27libsite-packagesPILImage.py", line 2634, in open
fp = builtins.open(filename, "rb")
IOError: [Errno 22] invalid mode ('rb') or filename: '6.bmprn'
我不知道是什么\r我只想发送图像路径以在Python中打开图像
当你像这样写数据时:
out.println("C:UsersacerDesktoppy6.bmp");
您正在添加行尾分隔符。
当您像这样读取数据时:
data = sock.recv(1024)
d=str(data)
您将包括您在字符串中读取的所有数据...包括行分隔符。 这就是为什么错误消息说:
IOError: [Errno 22] invalid mode ('rb') or filename: '6.bmprn'
看到rn
了吗? 这就是行分隔符。
您需要从文件名中修剪行分隔符...
im = Image.open(data.strip())