小编Eti*_*rot的帖子

如何使用-Xlint进行编译:未选中?

我在编译代码时收到一条消息:

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

java compiler-errors unchecked

69
推荐指数
6
解决办法
12万
查看次数

unicode Python字符串中的字节

在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)

python unicode utf-8 character-encoding

33
推荐指数
5
解决办法
5万
查看次数

在Python中读取.lnk文件的目标?

我正在尝试.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"文件夹的指向.我想要它的绝对位置.

python directory shortcut lnk target

26
推荐指数
6
解决办法
2万
查看次数

PySide:从布局中删除小部件

我正在尝试从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文档中的代码有何不同?

python qt pyside qlayout

21
推荐指数
1
解决办法
1万
查看次数

使用py2exe在.exe中嵌入图标,在Vista中可见?

我一直试图用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并因某些原因而截断其大小.

python embed icons py2exe windows-vista

17
推荐指数
1
解决办法
1万
查看次数

使用带有Java的FUSE库; 试图复制hello.c的例子

我正在尝试使用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)

c java mount arguments fuse

11
推荐指数
1
解决办法
3610
查看次数

Python/iptables:捕获所有UDP数据包及其原始目标

我正在尝试编写一个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)

python sockets udp iptables packet-capture

11
推荐指数
1
解决办法
7085
查看次数

在py2exe编译的Python脚本中为QImage启用JPEG支持?

我正在尝试使用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时我不会遇到这样的打包问题(它不是唯一的).我会吗?

qt jpeg pyqt py2exe qimage

10
推荐指数
1
解决办法
5897
查看次数

如何打印Numpy数组没有任何额外的表示法(方括号[]和元素之间的空格)?

我有一个二维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 arrays formatting numpy

9
推荐指数
2
解决办法
1万
查看次数

Python原始套接字监听UDP数据包; 只收到一半的数据包

我试图在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 3message 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具有相同的结果.

python sockets networking udp packet-capture

7
推荐指数
1
解决办法
1万
查看次数