2017-11-12 21 views
8

tôi đã phát triển một kịch bản python sikuli trên cửa sổ có sử dụng mã này:.sendto() phương pháp trên kịch bản python sikuli không hoạt động trên cửa sổ

from socket import AF_INET, SOCK_DGRAM 
import sys 
import socket 
import struct, time 

host = "pool.ntp.org" 
port = 123 
buf = 1024 
address = (host,port) 
msg = '\x1b' + 47 * '\0' 

# reference time (in seconds since 1900-01-01 00:00:00) 
TIME1970 = 2208988800L # 1970-01-01 00:00:00 

# connect to server 
client = socket.socket(AF_INET, SOCK_DGRAM) 
client.sendto(msg, address) 
msg, address = client.recvfrom(buf) 

t = struct.unpack("!12I", msg)[10] 
t -= TIME1970 

current_time = time.ctime(t).replace(" "," ") 

Mã này đang làm việc tốt dưới Linux hoặc trong một kịch bản python trên cửa sổ, nhưng nếu tôi sử dụng mã này trên sikulix trên cửa sổ nó bị treo (tại dòng =>client.sendto (msg, địa chỉ)) với các lỗi sau:

[error] script [ Sikuli_Test_Original ] stopped with error in line 23 
[error] _socket.error ([Errno -1] Unmapped exception:  java.util.concurrent.RejectedExecutionException: event executor terminated) 
[error] --- Traceback --- error source first line: module (function) statement 359: _socket (handle_exception) _socket.error: [Errno -1] Unmapped exception: java.util.concurrent.RejectedExecutionException: event executor terminated 
995: _socket (sendto) File "C:\Users\myuser\Documents\Sikuli\sikulix.jar\Lib\_socket.py", line 971, in _datagram_connect 
[error] --- Traceback --- end -------------- 

Bất cứ ý tưởng tại sao và làm thế nào để sửa chữa nó ?

+0

Từ các bản ghi lỗi tôi đã có ấn tượng rằng sikuli cố gắng sử dụng _socket.py riêng của mình và không phải là một hệ thống – user3472065

+0

Bạn đang sử dụng cùng một phiên bản sikuli trên cả hai hệ thống? –

+0

có, phiên bản mới nhất của sikulix – user3472065

Trả lời

0

Vấn đề của bạn đã được thảo luận và dường như giải quyết trong chủ đề này thảo luận về cách Sikuli interops với Jython (và nó có vẻ như một lỗi Jython): https://bugs.launchpad.net/sikuli/+bug/1464105

Tôi đã kiểm tra các giải pháp; mã này làm việc cho tôi trên Windows 10 từ bên trong IDE SikuliX. Bí quyết ở cơ bản trong tiêu đề khởi tạo thêm ở đầu trang:

import sys, _socket 
from socket import AF_INET, SOCK_DGRAM 
if _socket.NIO_GROUP.isShutdown(): 
    print "RE-CREATING NIO_GROUP" 
    _socket.NIO_GROUP = _socket.NioEventLoopGroup(2, _socket.DaemonThreadFactory("PyScan-Netty-Client-%s")) 
    sys.registerCloser(_socket._shutdown_threadpool) 
import socket 
import struct, time 

host = "pool.ntp.org" 
port = 123 
buf = 1024 
address = (host,port) 
msg = '\x1b' + 47 * '\0' 

# reference time (in seconds since 1900-01-01 00:00:00) 
TIME1970 = 2208988800L # 1970-01-01 00:00:00 
print "Before socket operation" 
# connect to server 
client = socket.socket(AF_INET, SOCK_DGRAM) 
client.sendto(msg, address) 
print "After socket operation" 
msg, address = client.recvfrom(buf) 
t = struct.unpack("!12I", msg)[10] 
t -= TIME1970 

current_time = time.ctime(t).replace(" "," ") 
print current_time 
Các vấn đề liên quan