资源简介
python在window上使用python-3.6.5-amd64.exe直接安装时会缺少fcntl.py文件,影响python使用。但是如果使用python-3.6.5-amd64-webinstall.exe安装就不会缺少该文件。解决办法:可以下载该文件放到python安装路径下的lib包内,或者卸载python,用python-3.6.5-amd64-webinstall.exe安装即可。
代码片段和文件信息
“““Test program for the fcntl C module.
“““
import platform
import os
import struct
import sys
import unittest
from test.support import (verbose TESTFN unlink run_unittest import_module
cpython_only)
# Skip test if no fcntl module.
fcntl = import_module(‘fcntl‘)
# TODO - Write tests for flock() and lockf().
def get_lockdata():
try:
os.O_LARGEFILE
except AttributeError:
start_len = “ll“
else:
start_len = “qq“
if (sys.platform.startswith((‘netbsd‘ ‘freebsd‘ ‘openbsd‘ ‘bsdos‘))
or sys.platform == ‘darwin‘):
if struct.calcsize(‘l‘) == 8:
off_t = ‘l‘
pid_t = ‘i‘
else:
off_t = ‘lxxxx‘
pid_t = ‘l‘
lockdata = struct.pack(off_t + off_t + pid_t + ‘hh‘ 0 0 0
fcntl.F_WRLCK 0)
elif sys.platform.startswith(‘gnukfreebsd‘):
lockdata = struct.pack(‘qqihhi‘ 0 0 0 fcntl.F_WRLCK 0 0)
elif sys.platform in [‘aix3‘ ‘aix4‘ ‘hp-uxB‘ ‘unixware7‘]:
lockdata = struct.pack(‘hhlllii‘ fcntl.F_WRLCK 0 0 0 0 0 0)
else:
lockdata = struct.pack(‘hh‘+start_len+‘hh‘ fcntl.F_WRLCK 0 0 0 0 0)
if lockdata:
if verbose:
print(‘struct.pack: ‘ repr(lockdata))
return lockdata
lockdata = get_lockdata()
class BadFile:
def __init__(self fn):
self.fn = fn
def fileno(self):
return self.fn
class TestFcntl(unittest.TestCase):
def setUp(self):
self.f = None
def tearDown(self):
if self.f and not self.f.closed:
self.f.close()
unlink(TESTFN)
def test_fcntl_fileno(self):
# the example from the library docs
self.f = open(TESTFN ‘wb‘)
rv = fcntl.fcntl(self.f.fileno() fcntl.F_SETFL os.O_NONBLOCK)
if verbose:
print(‘Status from fcntl with O_NONBLOCK: ‘ rv)
rv = fcntl.fcntl(self.f.fileno() fcntl.F_SETLKW lockdata)
if verbose:
print(‘String from fcntl with F_SETLKW: ‘ repr(rv))
self.f.close()
def test_fcntl_file_descriptor(self):
# again but pass the file rather than numeric descriptor
self.f = open(TESTFN ‘wb‘)
rv = fcntl.fcntl(self.f fcntl.F_SETFL os.O_NONBLOCK)
if verbose:
print(‘Status from fcntl with O_NONBLOCK: ‘ rv)
rv = fcntl.fcntl(self.f fcntl.F_SETLKW lockdata)
if verbose:
print(‘String from fcntl with F_SETLKW: ‘ repr(rv))
self.f.close()
def test_fcntl_bad_file(self):
评论
共有 条评论