小编jef*_*amp的帖子

在python中加载DLL时出错,而不是有效的win32应用程序

我试图在python中加载DLL来调用函数.

import ctypes
from ctypes import *

dsusb = ctypes.WinDLL('c:\python27\dsusb.dll')
Run Code Online (Sandbox Code Playgroud)

我的堆栈中出现以下错误.

C:\Python27>python test.py
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    dsusb = ctypes.WinDLL('c:\python27\dsusb.dll')
  File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 193] %1 is not a valid Win32 application
Run Code Online (Sandbox Code Playgroud)

我也尝试使用相同的代码cdll.

我查了一下错误,窗户说它是由于一个包含空格的路径......我认为这不是真正的问题......

我加载这个DLL是错误的还是在dll中可能存在错误的东西?

python dll ctypes

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

串口导入python

我正在尝试使用pyserial.当我执行以下脚本时.

import serial
ser= serial.serial("COM5", 9600)
ser.write("Hello worldn")
x = ser.readline()
print(x)     
Run Code Online (Sandbox Code Playgroud)

错误代码:

c:\Python27>python com.py
Traceback (most recent call last):
  File "com.py", line 2, in <module>
    ser= serial.serial("COM5", 9600)
AttributeError: 'module' object has no attribute 'serial'
Run Code Online (Sandbox Code Playgroud)

我读了一个建议,并改为:

from serial import serial
ser= serial.serial("COM5", 9600)
ser.write("Hello worldn
x = ser.readline()
print(x)     
Run Code Online (Sandbox Code Playgroud)

我现在得到错误

c:\Python27>python com.py
Traceback (most recent call last):
  File "com.py", line 1, in <module>
    from serial import serial
ImportError: cannot import name serial
Run Code Online (Sandbox Code Playgroud)

我读到这可能来自你的模块中的ini,但不知道任何关于这一点.

我打印了我的sys.path和pyserial在那里.

['C:\\Users\\Jeff\\Desktop', 'C:\\Python27\\lib\\site-packages\\distribute-0.6.4
9-py2.7.egg', …
Run Code Online (Sandbox Code Playgroud)

python serial-port module pyserial

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

用awk或任何东西填补空白

我有一个如下所示的列表,其中1列是位置,其他列对此问题不重要.

1  1 2 3 4 5
2  1 2 3 4 5
5  1 2 3 4 5
8  1 2 3 4 5
9  1 2 3 4 5
10 1 2 3 4 5
11 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)

我想填补空白,以便列表是连续的并且可以读取

1  1 2 3 4 5
2  1 2 3 4 5
3  0 0 0 0 0
4  0 0 0 0 0 
5  1 2 3 4 5
6  0 0 0 0 0 …
Run Code Online (Sandbox Code Playgroud)

bash awk

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

pyinstaller导入错误,未找到图像

我正在尝试为mac创建一个应用程序.当我使用pyinstaller在Windows机器上制作exe时,它工作正常,但是当我在mac上执行它时,该文件符合,但是当执行时我得到以下错误.

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyInstaller/loader/pyi_importers.py", line 270, in load_module
    exec(bytecode, module.__dict__)
  File "/Library/Frameworks/Python.framework/Versions/2.7/bin/build/new_client/out00-PYZ.pyz/FileDialog", line 11, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyInstaller/loader/pyi_importers.py", line 270, in load_module
    exec(bytecode, module.__dict__)
  File "/Library/Frameworks/Python.framework/Versions/2.7/bin/build/new_client/out00-PYZ.pyz/Tkinter", line 39, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyInstaller/loader/pyi_importers.py", line 409, in load_module
    module = imp.load_module(fullname, fp, filename, self._c_ext_tuple)
ImportError: dlopen(/var/folders/vb/vb9xryxdEz467ZADn0LL7U+++TI/-Tmp-/_MEIbvFCo2/_tkinter.so, 2): Library not loaded: @loader_path/Tcl
  Referenced from: /var/folders/vb/vb9xryxdEz467ZADn0LL7U+++TI/-Tmp-/_MEIbvFCo2/_tkinter.so
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

Tkinter和TCL似乎有些不对劲.以下是程序加载的模块.

import socket, thread, time, json, traceback, FileDialog
from functools import partial
from mtTkinter …
Run Code Online (Sandbox Code Playgroud)

macos tkinter pyinstaller python-2.7

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

了解python中的内存使用情况

我试图理解python如何使用内存来估计我一次可以运行多少进程.现在我在具有大量ram(~90-150GB可用RAM)的服务器上处理大文件.

对于测试,我会在python中做一些事情,然后查看htop以查看用法是什么.

步骤1:我打开一个2.55GB的文件并将其保存为字符串

with open(file,'r') as f:
    data=f.read()
Run Code Online (Sandbox Code Playgroud)

用法是2686M

第2步:我将文件拆分为换行符

data = data.split('\n')
Run Code Online (Sandbox Code Playgroud)

用法是7476M

第3步:我只保留每4行(我删除的三行中的两行与我保留的行长度相等)

data=[data[x] for x in range(0,len(data)) if x%4==1]
Run Code Online (Sandbox Code Playgroud)

用量是8543M

第4步:我将其拆分为20个相等的块以运行多处理池.

l=[] 
for b in range(0,len(data),len(data)/40):
    l.append(data[b:b+(len(data)/40)])
Run Code Online (Sandbox Code Playgroud)

用量是8621M

第五步:我删除数据,用法是8496M.

有几件事对我来说没有意义.

在第二步中,当我将字符串更改为数组时,为什么内存使用量会增加很多.我假设数组容器比字符串容器大得多?

在第三步中,为什么数据不会显着缩小.我基本上摆脱了3/4的阵列和阵列中至少2/3的数据.我希望它会相应缩小.调用垃圾收集器没有任何区别.

奇怪的是,当我将较小的数组分配给另一个变量时,它使用较少的内存. 用法6605M

当我删除旧对象时data: 用法6059M

这对我来说似乎很奇怪.任何有关缩小我的记忆足迹的帮助将不胜感激.

编辑

好吧,这让我头疼.很明显,python在幕后做了一些奇怪的事情......而且只有python.我已经使用我的原始方法和下面答案中建议的方法制作了以下脚本来演示这一点.数字都是GB.

测试代码

import os,sys
import psutil
process = psutil.Process(os.getpid())
import time

py_usage=process.memory_info().vms / 1000000000.0
in_file = "14982X16.fastq"

def totalsize(o):
    size = 0
    for x in o:
        size += sys.getsizeof(x)
    size += sys.getsizeof(o)
    return "Object size:"+str(size/1000000000.0)

def …
Run Code Online (Sandbox Code Playgroud)

python memory

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

VB.net返回chr(255)为chr(63)

我正在用visual basic编写一个程序,遇到了一个奇怪的问题.我通过串口将字符串发送到望远镜支架.当我发送check字符串时,范围可以返回chr(0)或chr(255).这在python和c ++返回chr(255)时工作正常.但是,当我在visual basic中运行脚本时,它返回chr(0)或chr(63).

下面是两个相同的函数,一个在python中,一个在visual basic中.

谁能让我知道为什么visual basic会返回63而不是255?

python中的函数(返回正确的值0和255):

global d, check
d=chr(80)+chr(4)+chr(16)+chr(2)+chr(1)+chr(112)+chr(252)+chr(0)
check=chr(80) + chr(1) + chr(16) + chr(19) + chr(0) + chr(0) + chr(0)+chr(1)


def test():
    ser.write(d)
    time.sleep(.1)
    print ser.readline()
    ser.write(check)
    time.sleep(.1)
    out=ser.readline()[0]
    print "out=",ord(out)
    while out == chr(0):
            print "out = ", ord(out)
            ser.write(check)
        time.sleep(.1)
            out=ser.readline()[0]
        print "out=",ord(out)
    print "out is now", ord(out)
    ser.readline()
Run Code Online (Sandbox Code Playgroud)

Visual Basic中的脚本(返回错误的值0和63)

Public Sub test()
    Dim out As Char
    Dim d As String = Chr(80) + Chr(4) + Chr(16) + Chr(2) …
Run Code Online (Sandbox Code Playgroud)

vb.net chr

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

python subprocess.call()找不到Windows Bash.exe

我有一个程序,该程序从另一个程序输出,该程序在Linux的新Windows子系统上运行。我已经编写了从Windows系统运行的python程序,但是将使用python子进程模块执行linux程序。如果这令人困惑,请参见下面的示例。

但是,当我这样做时,我发现通过python子进程调用时,Windows无法找到bash程序。

Windows中命令行或Powershell上的示例:

C:\>bash -c "echo hello world!"
hello world!

C:\>python
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess as s
>>> s.call('bash -c "echo hello world"'.split())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\Python27-32\lib\subprocess.py", line 524, in call
    return Popen(*popenargs, **kwargs).wait()
  File "c:\Python27-32\lib\subprocess.py", line 711, in __init__
    errread, errwrite)
  File "c:\Python27-32\lib\subprocess.py", line 948, in _execute_child
    startupinfo) …
Run Code Online (Sandbox Code Playgroud)

python windows bash subprocess

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

使用 Eval 将变量设置为等于多行字符串

我正在尝试使用 eval 设置多行变量

$ k="A
B
C"

$ echo "$k"
A
B
C

$ eval 'k="1
2
3"'

$ echo "$k"
1
2
3
Run Code Online (Sandbox Code Playgroud)

但我想使用 awk 通过 awk 脚本生成我的变量

$ echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}' 
awkV="1
2
3"

$ eval `echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'`
$ echo "$awkV"
1 2 3

$ eval '`echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'`'
-bash: unexpected EOF while looking for matching ``'
-bash: syntax error: unexpected end of file
bash: …
Run Code Online (Sandbox Code Playgroud)

bash awk eval

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