Articles of python

Python的ctypes从Linux上的libc调用reboot()

我试图通过ctypes从Python中的libc调用rebootfunction,我只是不能得到它的工作。 我一直在引用man 2 reboot页面( http://linux.die.net/man/2/reboot )。 我的内核版本是2.6.35。 下面是来自交互式Python提示符的控制台日志,我试图让我的机器重启 – 我做错了什么? 为什么不是ctypes.get_errno()工作? >>> from ctypes import CDLL, get_errno >>> libc = CDLL('libc.so.6') >>> libc.reboot(0xfee1dead, 537993216, 0x1234567, 0) -1 >>> get_errno() 0 >>> libc.reboot(0xfee1dead, 537993216, 0x1234567) -1 >>> get_errno() 0 >>> from ctypes import c_uint32 >>> libc.reboot(c_uint32(0xfee1dead), c_uint32(672274793), c_uint32(0x1234567), c_uint32(0)) -1 >>> get_errno() 0 >>> libc.reboot(c_uint32(0xfee1dead), c_uint32(672274793), […]

如何从python导入path中删除当前目录

我想和hg本身的mercurial仓库一起工作。 也就是说,我从https://www.mercurial-scm.org/repo/hg克隆了Mercurial,并希望在克隆的仓库中运行一些hg命令。 问题是,当在这个克隆中运行hg时, hg可执行文件尝试从这个目录加载它的python模块而不是从/usr/lib/pythonVERSION等等。据我所知,这是因为Python导入pathsys.path包含一个空string第一项可能意味着“当前目录”。 没有设置PYTHONPATH环境variables。 问题是我怎样才能防止我安装的hg导入“错误”的模块。

我该如何解决这个错误? Gtk-WARNING **:GModule …初始化检查失败:GLib版本太旧(微不匹配)

我正在用matplotlib编写一个python程序,我得到这个错误: GLib-GIO-Message:使用“内存”GSettings后端。 您的设置不会被保存或与其他应用程序共享。 (python:6304):Gtk-WARNING **:GModule(/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)初始化检查失败:GLib> version too old (微不匹配) (python:6304):Gtk-WARNING **:加载IM上下文types'ibus'失败 (python:6304):Gtk-WARNING **:GModule(/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)初始化检查失败:GLib版本太旧微不匹配) (python:6304):Gtk-WARNING **:加载IM上下文types'ibus'失败 (python:6304):Gtk-WARNING **:GModule(/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-ibus.so)初始化检查失败:GLib版本太旧微不匹配) (python:6304):Gtk-WARNING **:加载IM上下文types'ibus'失败 该程序完成执行,但错误不会消失。 我正在运行Ubuntu 16。 我尝试重新安装Glib,但没有任何改变。 我在网上寻找帮助,但找不到解决scheme。 我是一个noob,我不知道如何解决这个问题。 谁能帮我吗? 我真的很感激你的时间!

使用mmap增加文件的大小

在Windows上的Python中,我可以通过创build一个大文件 from mmap import mmap f = open('big.file', 'w') f.close() f = open('big.file', 'r+') m = mmap(f.fileno(), 10**9) 现在big.file是(大约)1千兆字节。 但在Linux上,这将返回ValueError: mmap length is greater than file size 。 有没有办法像在Windows上一样在Linux上获得相同的行为? 也就是说,能够使用mmap增加文件的大小?

OS X UDP发送错误:55没有可用的缓冲区空间

当我在OSX10.9.1上的python3.3中实现RUDP时,我注意到下面的代码实际上并没有做它在linux上的工作:(对于C,Java和C#/ Mono来说,哪种语言,同样的行为并不重要) from socket import * udp = socket(AF_INET, SOCK_DGRAM) udp.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) udp.bind(('0.0.0.0', 1337)) udp.setblocking(False) udp.setsockopt(SOL_IP, IP_TTL, 4) udp.connect(('8.8.8.8', 12345)) buf = b'x' * 400 for _ in range(1024 * 1024 * 10): udp.send(buf) 这个代码只是写了很多udp包到8.8.8.8,这些包在4跳之后被丢弃,所以他们不应该到达目的地,只是模拟出站stream量。 问题: 这段代码会抛出一个OSError(55,'No buffer space available')错误,而在Linux(Windows)上,它会抛出一个BlockingIOError,这很好,因为它是一个非阻塞套接字。 所以,在Linux和Windows上,套接字在OSX上的行为是正确的,这是一个OSError,这是不好的。 但真正有趣的是,即使我把这个套接字置于阻塞模式下,这个代码仍然会在OSX上抛出一个错误。 而在Linux和Windows上,这不会引发任何错误,正如所料,它只是阻止。 这是基于BSD系统的实现细节吗? 或者我错过了一些重要的networking设置? [编辑] 我忘了提到我正在千兆局域网中testing这种行为。 我认为这是问题。 我连接到一个100mbit的networking,问题就没有了,即使使用300mbit的wlan,问题也没有发生。 现在我想这是连接到高速networking时的一些OSX特定行为。 [编辑 – 最后]我终于find原因: http://lists.freebsd.org/pipermail/freebsd-hackers/2004-January/005369.html […]

OSError故障排除:出于pty设备

有时,我调用pty.openpty() (当我的脚本的一堆实例并发运行时发生pty.openpty()我得到了一个OSErrorexception,并带有'out of pty devices'消息。 什么是我打的限制? 我怎样才能解决这个问题? CentOS 5.6,Python 2.4

Python在打开文件后如何读取文件

我在理解Python被open后如何删除文件的概念方面遇到困难。 这里是代码: >>> import os >>> os.system('cat foo.txt') Hello world! 0 >>> f <_io.TextIOWrapper name='foo.txt' mode='r' encoding='UTF-8'> >>> os.system('rm -f foo.txt') 0 >>> os.system('cat foo.txt') cat: foo.txt: No such file or directory 256 >>> f.read() 'Hello world!\n' >>> 文本和二进制模式给出相同的结果。 我也尝试过大于1Gb的大文件,并在删除后也读取。 即使是非常大的文件, open操作也几乎是瞬间发生。 如果打开的文件不存在,Python从哪里获取数据? 我跑了这个testing python 3.4.3 / 3.5.2 ubuntu 14.04 / 16.04

如何在Python的Linux设备文件上执行低级I / O?

我有一个设备返回一个string来响应写入设备文件的命令。 我能够写入命令到设备,并读取C中的返回string,代码如下所示: int dev = open("/dev/USBDev251",O_RDWR); write(dev,data,sizeof(data)); read(dev,buff,16); 试图在python中做同样的事情: dev = os.open("/dev/USBDev251",os.O_RDWR) os.write(dev, data) os.read(dev,16) 写入成功,但只返回一个空string。 我在这里错过了什么?

Python shutil.copy在FAT文件系统上失败(Ubuntu)

问题:在Linux中使用shutil.copy()将文件复制到FAT16挂载的文件系统失败(Python 2.7.x)。 失败是shutil内部错误和实际上失败shutil.chmod,shutil.copy似乎执行。 Shell chmod也会失败,因为在FAT中不支持权限。 问题:有没有什么干净的方法呢? 我知道我有几个select,例如: 使用复制文件 – 不理想,因为它需要完整的path,而不仅仅是目标目录,但可行 执行shell cp来复制文件 编写自己的复制function,不要尝试更改文件模式 有没有办法解决这个在Python或FAT挂载选项? 我现在通过执行mount -t vfat -o umask = 000 / dev / loop0 / mnt / foo来挂载我的程序中的文件系统 捕获exception并没有什么帮助,因为在shutil.copy和shutil.copy()内发生exception时,它在从IOException发送到调用函数之前似乎从shutil.chmod()捕获IOExceptionexception时删除目标文件。 任何想法,或者我应该从1-3select一个? 汉努

我如何检测Ubuntu版本?

我目前正在编写一个改变一些networkingconfiguration文件的Python应用程序。 该应用程序需要在Ubuntu 10.04至13.10上运行。 问题是,NetworkManager在不同的版本中有不同的方式(尽pipe它们最终在13.04+版本中修复了这个问题)被破坏了,这会导致与我的应用程序不兼容。 我已经找出了每个版本的问题,并为他们开发了解决方法,我只是不确定最好的方法是检测用户正在运行的Ubuntu版本。 到目前为止我所提出的最好的解决scheme是parsinglsb_release -a的输出,但是这似乎是一个相当脆弱的解决scheme,可能会失败,例如Mint等Ubuntu派生的发行版本,甚至可能会出现一些“官方“变体(Kubuntu,Xubuntu等)。 有没有一种很好的方法来检测给定的Linux发行版的基本分布和版本,所以我可以基于我的应用程序在该版本上做出的select?