我在编译代码时收到一条消息:
Note: H:\Project2\MyGui2.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Run Code Online (Sandbox Code Playgroud)
我该如何重新编译-Xlint:unchecked
?
在Python 2中,Unicode字符串可能包含unicode和bytes:
a = u'\u0420\u0443\u0441\u0441\u043a\u0438\u0439 \xd0\xb5\xd0\xba'
Run Code Online (Sandbox Code Playgroud)
我知道这绝对不是应该在他自己的代码中编写的东西,但这是我必须处理的字符串.
上面字符串中的字节是UTF-8 ??
(Unicode \u0435\u043a
).
我的目标是获得一个包含Unicode中所有内容的unicode字符串,也就是说??????? ??
(\u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u0435\u043a
).
将其编码为UTF-8会产生
>>> a.encode('utf-8')
'\xd0\xa0\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xb8\xd0\xb9 \xc3\x90\xc2\xb5\xc3\x90\xc2\xba'
Run Code Online (Sandbox Code Playgroud)
然后从UTF-8解码后给出了包含字节的初始字符串,这不好:
>>> a.encode('utf-8').decode('utf-8')
u'\u0420\u0443\u0441\u0441\u043a\u0438\u0439 \xd0\xb5\xd0\xba'
Run Code Online (Sandbox Code Playgroud)
然而,我发现了解决问题的一种黑客方法:
>>> repr(a)
"u'\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439 \\xd0\\xb5\\xd0\\xba'"
>>> eval(repr(a)[1:])
'\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439 \xd0\xb5\xd0\xba'
>>> s = eval(repr(a)[1:]).decode('utf8')
>>> s
u'\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439 \u0435\u043a'
# Almost there, the bytes are proper now but the former real-unicode characters
# are now escaped with \u's; need to un-escape them.
>>> import re
>>> re.sub(u'\\\\u([a-f\\d]+)', lambda x …
Run Code Online (Sandbox Code Playgroud) 我正在尝试.lnk
从Python 读取一个shortcut()文件的目标文件/目录.是否有一种无头痛的方法呢?该.LNK规范[PDF]是在我头上的方式.我不介意使用仅限Windows的API.
我的最终目标是"(My) Videos"
在Windows XP和Vista上找到该文件夹.在XP上,默认情况下,它%HOMEPATH%\My Documents\My Videos
在Vista 上,在Vista上%HOMEPATH%\Videos
.但是,用户可以重新定位此文件夹.在这种情况下,%HOMEPATH%\Videos
文件夹不再存在,并被替换%HOMEPATH%\Videos.lnk
为新"My Videos"
文件夹的指向.我想要它的绝对位置.
我正在尝试从PySide应用程序中的布局中删除Qt小部件.
这是一个最小的例子.它是一个包含5个按钮的小部件,中间的按钮应该在单击时自行删除:
import sys
from PySide import QtGui
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
layout = QtGui.QVBoxLayout()
buttons = [QtGui.QPushButton(str(x)) for x in xrange(5)]
def deleteButton():
b = layout.takeAt(2)
buttons.pop(2)
del b
buttons[2].clicked.connect(deleteButton)
map(layout.addWidget, buttons)
widget.setLayout(layout)
widget.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
实际发生的是:
按钮是不可点击的,显然没有考虑布局计算,但其图像保持不变.
根据Qt文档,从布局中删除所有对象的正确方法是:
while ((child = layout->takeAt(0)) != 0) {
delete child;
}
Run Code Online (Sandbox Code Playgroud)
在这里我只想删除第三个按钮,所以我只是调用takeAt(2)
,然后del b
在该项上调用析构函数.按钮对象也是列表中的.pop
'd' buttons
,以确保没有对该对象的剩余引用.我的代码与导致此类行为的Qt文档中的代码有何不同?
我一直试图用py2exe将一个图标(.ico)嵌入到我的"compyled".exe中.
Py2Exe确实有一种嵌入图标的方法:
windows=[{
'script':'MyScript.py',
'icon_resources':[(1,'MyIcon.ico')]
}]
Run Code Online (Sandbox Code Playgroud)
这就是我正在使用的.该图标在Windows XP或更低版本上显示正常,但在Vista上根本不显示.我想这是因为新的Vista图标格式,可以是PNG格式,最高可达256x256像素.
那么,如何让py2exe将它们嵌入到我的可执行文件中,而不会破坏Windows XP上的图标?
我很酷,使用外部实用程序而不是py2exe - 我已经尝试使用此命令行实用程序来嵌入它,但它总是会破坏我的exe并因某些原因而截断其大小.
我正在尝试使用JNA创建与FUSE库的绑定,但我在路上遇到了障碍.我尽可能地减少了代码,使其在这里易于理解.
FUSE库附带了一些用C语言编写的示例文件系统.最简单的就是hello.c
.以下是其代码的最小化版本,只需在文件系统函数中进行一些打印:
hello.c
:
/*
FUSE: Filesystem in Userspace
Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
This program can be distributed under the terms of the GNU GPL.
See the file COPYING.
gcc -Wall hello.c -o hello `pkg-config fuse --cflags --libs`
*/
#define FUSE_USE_VERSION 26
#include <fuse.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
static int hello_getattr(const char *path, struct stat *stbuf)
{
printf("getattr was called\n");
return 0;
}
static int hello_readdir(const char *path, void *buf, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个iptables
规则,将所有传出的UDP数据包重定向到本地套接字,但我还需要目标信息.我开始了
sudo iptables -t nat -A sshuttle-12300 -j RETURN --dest 127.0.0.0/8 -p udp
sudo iptables -t nat -A sshuttle-12300 -j REDIRECT --dest 0.0.0.0/0 -p udp --to-ports 15000
Run Code Online (Sandbox Code Playgroud)
这很好,现在我可以通过端口15000上的套接字获取所有传出的UDP数据包.
现在,我需要目标信息(目标主机和端口号),因此简单的UDP套接字是不够的; 需要一个原始套接字,以便它获得完整的IP标头.
然而,事实证明,收到的数据包似乎已得到解决localhost:15000
.这是有道理的,因为那是套接字的位置,但这不是我想要的; 我希望在重定向数据包之前使用主机/端口iptables
.
谷歌搜索导致了这个问题,答案提出了两种方法:TPROXY
并且SO_ORIGINAL_DST
,推荐前者,这就是我试图使用的方法.
添加了以下iptables
规则TPROXY
:
sudo iptables -t mangle -A PREROUTING -j TPROXY --dest 0.0.0.0/0 -p udp --on-port 15000
Run Code Online (Sandbox Code Playgroud)
从tproxy.txt读取,我们需要创建一个带有该IP_TRANSPARENT
选项的侦听套接字(这是以root身份完成的):
from socket import *
s = socket(AF_INET, SOCK_RAW, IPPROTO_UDP)
# The …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用PyQt4在Python脚本的QImage对象中使用JPEG图像.
脚本本身运行良好,图像加载,可以操作和渲染,所有.但是,当我尝试用py2exe"编译"这个脚本时,一切都可以工作但JPEG图像.用PNG等效替换它可以工作,但由于我的程序从网上下载图像,它们不会一直是PNG格式,我不能用另一个库将它们全部转换.
我发现QImage的JPEG图像支持以及其他图像格式是由\ qt\plugins\imageformats目录中的一些DLL提供的(它们被称为qjpeg4.dll和qjpeg4d.dll).我想我需要在我的可执行文件中以某种方式使用它们,但我不知道如何.我试过简单地将它们复制到我的exe目录,没有运气.我已经尝试过,如此处所示,将这些文件作为data_files包含在setup.py脚本中,但没有运气(看起来它所做的就是将这些文件复制到exe的目录中,因此无论如何都不会因为手动复制它们而改变它们).
我确定有一些使用PyQt和JPEG图像的应用程序,他们是如何做到的?这似乎是一项微不足道的任务,但我现在仍然坚持下去.
另外,我希望我的应用程序是跨平台的(为什么我还要用Python编写代码?),我希望在打包OS X或Linux时我不会遇到这样的打包问题(它不是唯一的).我会吗?
我有一个二维numpy数组,看起来像这样:
[[a b c]
[d e f]
[g h i]]
Run Code Online (Sandbox Code Playgroud)
我想打印它没有通常带有阵列的任何默认的符号绒毛; 即[
,]
和元素之间的空间.像这样的东西:
abc
def
ghi
Run Code Online (Sandbox Code Playgroud)
是否有可能做这样的事情(当然没有一个微不足道的,可能是昂贵的Python循环)?
我看过numpy.set_printoptions但看起来它只设置元素显示方式的表示选项,而不是两者之间的字符.
编辑:阵列中的元件具有字符串表示,可以是任何东西,包括[
,]
和空白.如何构建这样一个数组的最小例子:
class custom(object):
def __repr__(self):
return 'a'
a = numpy.empty((5, 5), custom)
a.fill(custom())
print a
Run Code Online (Sandbox Code Playgroud) 我试图在Python中创建一个仅用于侦听UDP数据包的原始套接字:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
s.bind(('0.0.0.0', 1337))
while True:
print s.recvfrom(65535)
Run Code Online (Sandbox Code Playgroud)
这需要以root身份运行,并在端口1337上创建一个原始套接字,它接收UDP数据包并在收到它们时打印它们; 没有问题.
现在让我们做一个小客户端来测试它是否有效:
import socket
c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
c.connect(('127.0.0.1', 1337))
c.send('message 1')
c.send('message 2')
c.send('message 3')
c.send('message 4')
c.send('message 5')
c.send('message 6')
Run Code Online (Sandbox Code Playgroud)
始终如一,只有第一,第三和第五条消息(message 1
,message 3
和message 5
)将通过并打印在服务器输出中.第二,第四和第六条消息未显示在服务器输出上,而是客户端获得异常:
>>> c.send('message 2')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.error: [Errno 111] Connection refused
Run Code Online (Sandbox Code Playgroud)
在Wireshark中运行它表明它正在获取"目标无法访问"的ICMP回复.我已经能够在3台不同的机器上重现这一点(所有机器都在运行Linux).我错过了什么吗?UDP的这种预期行为是否始终丢弃数据包,因为使用它的协议应该容忍数据包丢失?即便如此,为什么在本地接口上发送数据包会被丢弃?
绑定服务器127.0.0.1
而不是0.0.0.0
具有相同的结果.