获取在Windows python 3上运行的python 3 linux创建脚本时出现的问题

获取在Windows python 3上运行的python 3 linux创建脚本时出现的问题,python,linux,windows,scripting,Python,Linux,Windows,Scripting,如果有人能帮助我,那就太好了。我使用python 2.6版在Linux上创建了一个python服务器和客户端脚本。据我所知,只要在Windows中安装相同版本的python,我就应该能够运行相同的脚本而不会出现问题。我这样做了,脚本除了打印Importerror之外什么都不做:没有名为fcntl的模块。我正在添加服务器代码和客户端。如果有人能说明我做错了什么,那就太好了。还有,既然我已经在这里了,我怎么可能也让客户端代码在windows中自动运行,而不必在客户端机器上安装python 客户

如果有人能帮助我,那就太好了。我使用python 2.6版在Linux上创建了一个python服务器和客户端脚本。据我所知,只要在Windows中安装相同版本的python,我就应该能够运行相同的脚本而不会出现问题。我这样做了,脚本除了打印Importerror之外什么都不做:没有名为fcntl的模块。我正在添加服务器代码和客户端。如果有人能说明我做错了什么,那就太好了。还有,既然我已经在这里了,我怎么可能也让客户端代码在windows中自动运行,而不必在客户端机器上安装python

客户

  #!/usr/bin/env python

import socket
import fcntl
import struct

#############################
def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])

def getHwAddr(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    info = fcntl.ioctl(s.fileno(), 0x8927,  struct.pack('256s', ifname[:15]))
    return ''.join(['%02x:' % ord(char) for char in info[18:24]])[:-1]

host = socket.gethostname()

#print host
#print getHwAddr('eth0')
#print get_ip_address(enter code here'eth0')
info = "<"+get_ip_address('eth0')+">","{"+ getHwAddr('eth0')+"}","~"+host+"~"
############################

TCP_IP = 'IP'
TCP_PORT = xxxx
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(str(info))
data = s.recv(BUFFER_SIZE)
s.close()

#print "received data:", data
另外,请快速提及。服务器端代码将仅在Linux中运行,而客户端代码将在Windows中运行。再次感谢所有能伸出援手的人

仅存在于Unix平台上

尝试使用以下命令获取Windows上的mac地址,以替换fcntl.ioctl调用:

,但我认为这是非常恰当的。我修改了名称以匹配

然后,只需修复这一行,您就可以通过IP而不是通过接口名称进行配置Windows中的所有接口名称都有点。。。再长一点

ip_address = '123.234.34.5'    # from your configuration
...
...
info = "<"+ip_address+">","{"+ getHwAddr(ip_address)+"}","~"+host+"~"

如果您在中注意到,它只在Unix上工作。虽然python可以跨多个不同的平台工作,但标准库中的各个模块甚至模块中的函数/类都依赖于操作系统特定的行为,并且只有在操作系统支持该功能时才提供。好的,我已经删除了fcntl,我正试图使用netifaces,但当我尝试导入它时,我会出现以下错误。>>>导入netifaces回溯最近的调用最后一个:文件,第1行,在导入netifaces中导入错误:也没有名为“netifaces”的模块,这是我在windows 7中使用的python,32位。Python 3.4.1 v3.4.1:c0e311e010fc,2014年5月18日,10:38:22[MSC v.1600 32位英特尔]关于win32类型的版权、信用或许可证,了解更多信息@Kursancewy你必须安装它。这是第三方模块。我一直在尝试,但没有结果。安装Python3,2.7,2.6只是为了让pip正常工作,什么都没有。使用XP作为机器可能会有什么问题,或者它不应该有任何事情要做?没关系,我正在尝试插入python,对不起,谢谢你的帮助。
import netifaces as nif
...
...
def getHwAddr(ip):
    'Returns a list of MACs for interfaces that have given IP, returns None if not found'
    for i in nif.interfaces():
        addrs = nif.ifaddresses(i)
        try:
            if_mac = addrs[nif.AF_LINK][0]['addr']
            if_ip = addrs[nif.AF_INET][0]['addr']
        except IndexError: 
            if_mac = if_ip = None
        except KeyError:
            if_mac = if_ip = None
        print if_ip, ip
        if if_ip == ip:
            return if_mac
    return None
ip_address = '123.234.34.5'    # from your configuration
...
...
info = "<"+ip_address+">","{"+ getHwAddr(ip_address)+"}","~"+host+"~"