小编Art*_*ich的帖子

CMake错误:TARGETS没有为共享库目标提供LIBRARY DESTINATION

在使用CMake构建一个开源项目时(在我的例子中,它是柠檬图库),当我尝试通过-DBUILD_SHARED_LIBS=1以下方式构建共享库时出现此错误:

TARGETS given no LIBRARY DESTINATION for shared library target
Run Code Online (Sandbox Code Playgroud)

这个错误来自哪里,我该如何解决?

cmake lemon-graph-library

35
推荐指数
3
解决办法
3万
查看次数

pyserial的二进制数据(python串口)

pyserial中的serial.write()方法似乎只发送字符串数据.我有像[0xc0,0x04,0x00]这样的数组,并希望能够通过串口发送/接收它们吗?原始I/O有什么单独的方法吗?

我想我可能需要将数组更改为['\ xc0','\ x04','\ x00'],仍然,null字符可能会造成问题.

python binary serial-port pyserial

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

pyserial - 可以从线程a写入串口,从线程b做阻塞读取吗?

我试过谷歌搜索,找不到答案,在这里搜索,找不到答案.有没有人研究从线程a写入Serial()对象(pyserial)是否是线程安全并从线程b执行阻塞读取?

我知道如何使用线程同步原语和线程安全的数据结构,事实上我这个程序的当前形式有一个专用于读取/写入串口的线程,我使用线程安全的数据结构来协调应用程序中的活动.

如果我可以从主线程写入串口(并且从不读取它),我的应用程序将受益匪浅,并使用第二个线程中的阻塞读取从串行端口读取(并且永远不会写入它).如果有人真的希望我进入为什么这会使应用程序受益,我可以添加我的理由.在我看来,只有一个Serial()实例,即使线程B位于Serial对象的阻塞读取中,线程A也可以安全地在Serial对象上使用write方法.

有人知道Serial类是否可以这样使用?

编辑:我觉得答案可能是平台依赖的.如果您对此类平台有任何经验,最好知道您正在使用哪个平台.

编辑:只有一个回复,但如果有其他人尝试过此,请留下您的经验回复.

python serial-port pyserial

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

Python对象转换的模式(编码,解码,反序列化,序列化)

我一直在使用解析模块构造,并发现自己真的迷恋它的数据结构的声明性质.对于那些不熟悉它的人,您可以编写Python代码,这些代码基本上就像您在实例化时通过嵌套对象尝试解析的内容.

例:

ethernet = Struct("ethernet_header",
   Bytes("destination", 6),
   Bytes("source", 6),
   Enum(UBInt16("type"),
       IPv4 = 0x0800,
       ARP = 0x0806,
       RARP = 0x8035,
       X25 = 0x0805,
       IPX = 0x8137,
       IPv6 = 0x86DD,
   ),
)
Run Code Online (Sandbox Code Playgroud)

虽然构造实际上不支持在此结构中存储值(您可以将抽象Container解析为字节流或将字节流解析为抽象容器),但我希望扩展框架,以便解析器也可以在解析时存储值可以用点符号ethernet.type访问它们.

但是在这样做时,认为这里最好的解决方案是编写编码/解码机制的通用方法,这样您就可以注册编码/解码机制,并能够从抽象数据结构中生成各种输出(解析器本身) ),以及解析器的输出.

举个例子,默认情况下,当您运行通过解析器打包的以太网时,最终会得到类似dict的内容:

Container(name='ethernet_header', 
    destination='\x01\x02\x03\x04\x05\x06', 
    source='\x01\x02\x03\x04\x05\x06', 
    type=IPX
)
Run Code Online (Sandbox Code Playgroud)

我不想两次解析东西 - 理想情况下我希望解析器以可配置的方式生成'target'对象/字符串/字节.

这个想法的根源在于你可以为消费或处理结构注册各种"插件",这样你就可以以编程方式生成XML或Graphviz图,以及能够从字节转换为Python dicts.任务的关键是,走一个节点树并基于编码器/解码器,转换并返回转换后的对象.

所以问题基本上是 - 哪种模式最适合这个目的?


编解码器风格:

我查看了编解码器模块,它相当优雅,因为您创建了编码机制,注册您的类可以编码的东西,您可以指定您想要的特定编码.

'blah blah'.encode('utf8')
Run Code Online (Sandbox Code Playgroud)


serdes(序列化器,解串器):

有一些现有的用于Python的serdes模块的例子,我想起了JSON - 但它的问题在于它非常具体,并且不容易支持任意格式.你可以编码或解码JSON,基本上就是这样.有像这样构造的各种serdes,有些使用load,*dumps*方法,有些则没有.这是一个废话.

objects = json.loads('{'a': 1, 'b': 2})
Run Code Online (Sandbox Code Playgroud)


访客模式(?):

我对访问者模式并不十分熟悉,但似乎确实有一些可能适用的机制 - 这个想法(如果我理解正确的话),你设置了一个节点访问者,它就是树并应用一些转换(并返回新的对象?)..我在这里很朦胧.


其他?:

是否有其他机制可能更加pythonic或已经写入?我考虑过使用ElementTree和子类化Elements - 但是我想在做一些愚蠢的事情之前咨询stackoverflow.

python encoding serialization construct deserialization

8
推荐指数
0
解决办法
947
查看次数

使用pySerial重新连接到设备

我目前在Python中遇到pySerial模块的问题.我的问题涉及连接和断开设备.我可以成功连接到我的设备并与我通信,只要我愿意,并在我想要时断开它.但是,一旦连接断开,我就无法重新连接到设备.

这是我的程序用来与串口连接的包装类:

import serial, tkMessageBox

class Controller:
""" Wrapper class for managing the serial connection with the MS-2000. """
    def __init__(self, settings):
        self.ser = None
        self.settings = settings

    def connect(self):
        """ Connect or disconnect to MS-2000. Return connection status."""
        try:
            if self.ser == None:
                self.ser = serial.Serial(self.settings['PORT'],
                                         self.settings['BAUDRATE'])
                print "Successfully connected to port %r." % self.ser.port
                return True
            else:
                if self.ser.isOpen():
                    self.ser.close()
                    print "Disconnected."
                    return False
                else:
                    self.ser.open()
                    print "Connected."
                    return True
        except serial.SerialException, e:
            return False

    def isConnected(self):
        '''Is …
Run Code Online (Sandbox Code Playgroud)

python serial-port pyserial

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

WSS4j元素在签名SOAP消息期间排序

我正在用Java实现Web服务客户端,它使用wss4j 1.6.8进行WS-Security(为了更加精确,我需要签署SOAP消息).服务器端要求请求具有以下结构:

<Envelope>
    <Header>
        <wsse:Security mustUnderstand="1">
            **<wsu:Timestamp wsu:Id="Timestamp-913ca68e-05ed-44e1-9d6c-b2f293da5a1d">
                <wsu:Created>2012-12-21T11:37:31Z</wsu:Created>
                <wsu:Expires>2012-12-21T11:42:31Z</wsu:Expires>
            </wsu:Timestamp>**
            <wsse:BinarySecurityToken>
                MIID2jCCAsKg...
            </wsse:BinarySecurityToken>
            <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
                <SignedInfo>
                    <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                    <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
                    <Reference URI="#Timestamp-913ca68e-05ed-44e1-9d6c-b2f293da5a1d">
                        <Transforms>
                            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                        </Transforms>
                        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                        <DigestValue>jdVY1HaDLusqO9UcxASE/GQHxyo=</DigestValue>
                    </Reference>
                    <Reference URI="#Body-e344eef1-2d8a-42d0-8a30-361ee61a8617">
                        <Transforms>
                            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                        </Transforms>
                        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                        <DigestValue>L60mQelZERvXgLEgWlW50uJNqEA=</DigestValue>
                    </Reference>
                </SignedInfo>
                <SignatureValue>
                    NmgACUqrYYc/Kp/F...
                </SignatureValue>
                <KeyInfo>
                    <wsse:SecurityTokenReference xmlns="">
                        <wsse:Reference URI="#SecurityToken-3f054298-711c-4090-95c3-105e1093f3ba" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
                    </wsse:SecurityTokenReference>
                </KeyInfo>
            </Signature>
        </wsse:Security>
    </S:Header>
    <S:Body>
        Body content...
    </S:Body>
</Envelope>
Run Code Online (Sandbox Code Playgroud)

我的解决方案签署文档(正文和时间戳元素),但由于某种原因,wss4j将时间戳元素放在该部分的底部,之后<wsse:BinarySecurityToken><Signature>元素出错.请查看签约工作的来源:

 public static SOAPMessage signSoapMessage(SOAPMessage message, PrivateKey signingKey, X509Certificate signingCert, char[] passphrase) throws WSSecurityException { …
Run Code Online (Sandbox Code Playgroud)

java ws-security web-services

6
推荐指数
1
解决办法
7916
查看次数

如何使用XMLSpy或SoapUI从XML响应中保存二进制数据

我正在使用XMLSpy和SoapUI,并使用Web服务(ws)调用Fedex来生成标签.来自Fedex的回复是嵌入在Web服务响应中的PNG或PDF文件.如何保存PNG/PDF元素?

web-services xmlspy soapui

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

连接到设备时更改pySerial中的波特率?

我正在尝试为一个名为uLCD32-pt的LCD设备编写一个脚本,问题是您需要以波特率9600连接它,并且为了获得更高的波特率,您必须连接它,发送更改波特率命令,然后以新设置的波特率发送新命令.在绘制像素时,我的液晶显示器显得非常慢,我知道它因为波特率,所以在连接到设备后,他们有什么方法可以改变波特率?到目前为止,这是我的代码?

import serial
import time

#Connect to uLCD32-pt with autobaud
ser = serial.Serial(
    port='/dev/ttyUSB0', 
    baudrate=9600, 
    timeout=1,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)
ser.write("U")


while(True):
    #15 x white pixels
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0001)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#1
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0002)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#2
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0003)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#3
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0004)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#4
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0005)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#5
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0006)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#6
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0007)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#7
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0008)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#8
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0009)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#9
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000A)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#10
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000B)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#11
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000C)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#12
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000D)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#13
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000E)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#14
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000F)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#15
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0010)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#16
Run Code Online (Sandbox Code Playgroud)

python usb lcd pyserial baud-rate

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

当对象需要默认构造函数时,初始化shared_ptr

为了将shared_ptr分配给柠檬图库中的Graph类型变量,我这样做了:

typedef ListDigraph Graph;
typedef std::shared_ptr<Graph> Process_pointer;
Process_pointer process(new Graph);
Run Code Online (Sandbox Code Playgroud)

它运行正常,但现在我需要为地图对象声明一个shared_ptr,通常地图对象的工作方式如下:

Graph process;
typedef ListDigraph::NodeMap<string> Node_names;
Node_names name(process);
Run Code Online (Sandbox Code Playgroud)

也就是说,name需要Graph对象作为其默认构造函数.

为了声明一个shared_ptr,我这样做了:

typedef ListDigraph::NodeMap<string> Node_names;
typedef std::shared_ptr<Node_names> Nname_pointer;
Nname_pointer name = new Node_names;
name(process);
Run Code Online (Sandbox Code Playgroud)

我知道,名称的声明是错误的,但我如何分配内存以及用进程对象初始化它.

c++ shared-ptr lemon-graph-library

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