小编And*_*rew的帖子

程序在IDLE中工作,但在命令行失败

我正在使用Python的ctypes库与Windows DLL进行通信.当我从IDLE,Ipython运行我的代码,或者输入交互式python解释器时,它工作正常.当我从Windows命令提示符运行相同的代码时,它崩溃了.为什么单向崩溃,一种方式成功?

这是我正在运行的代码的简化版本:

import ctypes, os, sys

print "Current directory:", os.getcwd()
print "sys.path:"
for i in sys.path:
    print i

PCO_api = ctypes.oledll.LoadLibrary("SC2_Cam")

camera_handle = ctypes.c_ulong()
print "Opening camera..."
PCO_api.PCO_OpenCamera(ctypes.byref(camera_handle), 0)
print " Camera handle:", camera_handle.value

wSensor = ctypes.c_uint16(0)
print "Setting sensor format..."
PCO_api.PCO_SetSensorFormat(camera_handle, wSensor)
PCO_api.PCO_GetSensorFormat(camera_handle, ctypes.byref(wSensor))
mode_names = {0: "standard", 1:"extended"}
print " Sensor format is", mode_names[wSensor.value]
Run Code Online (Sandbox Code Playgroud)

当我从IDLE或Ipython运行此代码时,我得到以下结果:

Current directory: C:\Users\Admin\Desktop\code
sys.path:
C:\Users\Admin\Desktop\code
C:\Python27\Lib\idlelib
C:\Windows\system32\python27.zip
C:\Python27\DLLs
C:\Python27\lib
C:\Python27\lib\plat-win
C:\Python27\lib\lib-tk
C:\Python27
C:\Python27\lib\site-packages
Opening camera...
 Camera handle: 39354336
Setting sensor format... …
Run Code Online (Sandbox Code Playgroud)

python dll ctypes python-idle

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

使用python多处理动态创建共享数组列表

我想用python的多处理模块在不同的子进程之间共享几个numpy数组.我希望这些数组可以单独锁定,我希望在运行时动态确定数组的数量.这可能吗?

这个答案中,JF Sebastian提出了一种在多处理过程中在共享内存中使用python的numpy数组的好方法.该数组是可锁定的,这就是我想要的.我想做一些非常相似的事情,除了可变数量的共享数组.数组的数量将在运行时确定.他的示例代码非常清晰,几乎完全符合我的要求,但我不清楚如何声明可变数量的此类数组,而不给每个数组一个硬编码的名称,如shared_arr_1,shared_arr_2等等.这样做的正确方法是什么?

python ipc numpy shared-memory multiprocessing

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

我应该如何在 Windows 上启动可移植的 Python Tkinter 应用程序而不显得丑陋?

我使用 Tkinter 在 python 中编写了一个简单的 GUI 程序。我们将此程序称为“gui.py”。我的用户使用Portable Python从 USB 密钥在 Windows 计算机上运行“gui.py” ;在主机上安装任何东西都是不可取的。

我希望我的用户通过双击 USB 密钥根目录下的图标来运行“gui.py”。我的用户不关心 python 是什么,如果不需要,他们也不想使用命令提示符。我不希望他们关心 USB 密钥分配的驱动器号。我希望它可以在 XP、Vista 和 7 上运行。

我的第一个丑陋的解决方案是在 USB 密钥的根目录中创建一个快捷方式,并将快捷方式的“目标”属性设置为“(root)\App\pythonw.exe (root)\App\gui.py” ”,但我不知道如何在 Windows 快捷方式中执行相对路径,并且使用像“E:”这样的绝对路径似乎很脆弱。

我的下一个解决方案是在 USB 闪存盘的根目录中创建一个 .bat 脚本,如下所示:

@echo off
set basepath=%~dp0
"%basepath%App\pythonw.exe" "%basepath%\App\gui.py"
Run Code Online (Sandbox Code Playgroud)

这似乎并不关心 USB 密钥分配的驱动器号,但它确实在我的程序运行时使 DOS 窗口保持打开状态。实用,但丑陋。

接下来我尝试了这样的 .bat 脚本:

@echo off
set basepath=%~dp0
start "" "%basepath%App\pythonw.exe" "%basepath%\App\gui.py"
Run Code Online (Sandbox Code Playgroud)

(有关有趣引用的解释,请参见此处)

现在,在 GUI 打开之前,DOS 窗口会在屏幕上短暂闪烁。少一点丑!还是丑啊

真正的男人如何处理这个问题呢?从 USB 记忆棒在 Windows 机器上启动 python Tkinter GUI 的最不丑陋的方法是什么?

编辑:下面的所有答案都非常好(py2exe、pyinstaller、小.exe、.wsf 脚本。).wsf 解决方案是最简单的,所以我现在使用它。如果我想要更漂亮的图标和标准的 .exe 扩展名,我可能最终会切换到其他三种解决方案之一。感谢大家!

python windows tkinter relative-path portable-executable

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

python 在交互模式下运行时有何不同?

如果我使用 Python 的交互模式一次输入一个命令,我有一些 Python 代码可以按预期工作。myscript.py如果保存为并运行为 ,相同的代码会崩溃'C:\Python27\python.exe myscript.py'

如果相同的代码在交互模式下工作,作为脚本运行 Python 代码会在哪些方面导致其崩溃?

这个问题询问如何判断 python 是否处于交互模式。然而,提问者只想要一个单一的、可靠的交互模式指纹。我想要一个交互模式不同的方式的列表,特别注意这可能导致的问题。

例如:

  • sys.path可能会有所不同
  • os.getcwd()可能会有所不同
  • os.environ可能会有所不同
  • 这个问题的所有答案
  • 此警告位于多处理模块文档的开头

Python 的交互模式和脚本模式之间还有什么不同?

python interactive interactive-mode

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

打开一个pyglet窗口而不需要聚焦

我的python应用程序启动一个创建pyglet窗口的子进程.当pyglet窗口打开时,它位于所有其他窗口的前面,并且需要键盘焦点.我希望我的pyglet窗口在后台打开,而不是焦点.这可能吗?

我正在使用的代码的简化版本:

import pyglet

pyglet.window.Window()
pyglet.app.run() 
Run Code Online (Sandbox Code Playgroud)

我正在使用Windows 7,以防万一.

python windows graphics subprocess pyglet

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

什么是Pythonic方法来制作对象的非阻塞版本?

我经常使用python对象的方法阻塞直到完成,并希望将这些方法转换为非阻塞版本.我发现自己经常执行以下模式:

  1. 定义对象
  2. 定义一个创建对象实例的函数,并解析命令以调用该对象的方法
  3. 定义一个"父"对象,该对象创建一个运行第2步中定义的函数的子进程,并复制原始对象的方法.

这可以完成工作,但是需要花费很多繁琐的代码重复,而且对我来说似乎不是Pythonic.有没有标准的,更好的方法来做到这一点?

一个高度简化的例子来说明我一直在使用的模式:

import ctypes
import Queue
import multiprocessing as mp

class Hardware:
    def __init__(
        self,
        other_init_args):
        self.dll = ctypes.cll.LoadLibrary('hardware.dll')
        self.dll.Initialize(other_init_args)

    def blocking_command(self, arg_1, arg_2, arg_3):
        """
        This command takes a long time to execute, and blocks while it
        executes. However, while it's executing, we have to coordinate
        other pieces of hardware too, so blocking is bad.
        """
        self.dll.Takes_A_Long_Time(arg_1, arg_2, arg_3)

    def change_settings(self, arg_1, arg_2):
        """
        Realistically, there's tons of other functions in the DLL we …
Run Code Online (Sandbox Code Playgroud)

python multithreading subprocess nonblocking multiprocessing

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

为什么我没有看到Numpy的DeprecationWarning?

我最近在我的一台机器上更新了Python的Numpy软件包,显然我已经暂时依赖于numpy的一个不推荐的功能:

>>> np.__version__
'1.10.4'
>>> a = np.ones(10, dtype=np.uint16)
>>> a /= 0.5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'H') according to the casting rule ''same_kind''
Run Code Online (Sandbox Code Playgroud)

上述链接中的一位评论者指出:

可能意味着你永远不会看到弃用警告;)

......这是正确的,我没有.

为什么呢?我是如何设法错过弃用警告的?

文档一致,这个相同的代码在我以前的numpy版本中的工作方式不同:

>>> np.__version__
'1.9.2'
>>> a = np.ones(10, dtype=np.uint16)
>>> a /= 0.5
>>> a
array([2, 2, 2, 2, 2, 2, 2, …
Run Code Online (Sandbox Code Playgroud)

python warnings numpy deprecated deprecation-warning

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

在OS X上安装python 2的最佳方法是什么?

我的一位同事希望在他的OS X(10.6)机器上使用我的python 2代码.我的代码导入了几个内置的python包,包括Tkinter和shelve,还使用了第三方包,包括numpy,scipy,matplotlib和ipython.

我在OS X的内置python中遇到了一些问题.(IDLE不起作用,例如*).我怀疑我应该安装更新版本的python,以及不同版本的Tk.

我的问题:

  1. 在同一台机器上有两个不同版本的python/Tk会导致问题吗?

  2. 我想将终端命令'python','ipython'和'easy_install'与更新版本的python相关联.我该怎么做?

  3. 当我使用.dmg文件安装numpy等第三方软件包时,如何控制安装哪个版本的python numpy?

  4. 有一个更好的方法吗?

如果这个过程顺利,我会考虑在我的代码文档中添加OS X指令,所以我想把这个过程简化为最简单,最通用的方法.

*编辑:此外,

编辑:谢谢大家的有用答案.我的同事尝试了MacPorts,它似乎运行良好,但有几个speedbumps.首先,我们必须从系统安装盘安装Xcode.这不是快速或轻量级安装(几GB).幸运的是我们还有磁盘!安装Xcode后,MacPorts易于安装.Python和我们需要的python子包也很容易安装,但他告诉我这个安装需要几个小时.据推测,这种延迟是由于汇编造成的?他很容易将MacPorts python设置为默认值.但是,我认为我们必须手动更改'Python Launcher'应用程序,这似乎仍然默认为系统python.

即使他现在有一个工作系统,我很想让他尝试其他解决方案之一.我不确定我的所有代码的潜在用户是否会容忍多小时,数千兆字节的安装.

python macos numpy tkinter ipython

4
推荐指数
2
解决办法
6758
查看次数

为什么为 Python 函数中引发的异常创建变量名会影响该函数的输入变量的引用计数?

我定义了两个简单的 Python 函数,它们接受单个参数、引发异常并处理引发的异常。一个函数在引发/处理之前使用变量来引用异常,另一个函数则不使用:

def refcount_unchanged(x):
    try:
        raise Exception()
    except:
        pass

def refcount_increases(x):
    e = Exception()
    try:
        raise e
    except:
        pass
Run Code Online (Sandbox Code Playgroud)

结果函数之一增加了refcount其输入参数的 pythons,另一个则没有:

import sys

a = []
print(sys.getrefcount(a))
for i in range(3):
    refcount_unchanged(a)
    print(sys.getrefcount(a))
# prints: 2, 2, 2, 2

b = []
print(sys.getrefcount(b))
for i in range(3):
    refcount_increases(b)
    print(sys.getrefcount(b))
# prints: 2, 3, 4, 5
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么会发生这种情况

python garbage-collection exception reference-counting

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

在64位python ctypes中使用msvcrt

我想使用ctypes包从64位python中调用msvcrt函数.我显然做错了.这是明智的正确方法吗?

Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> libc = ctypes.cdll.msvcrt
>>> fp = libc.fopen('text.txt', 'wb') #Seems to work, creates a file
>>> libc.fclose(ctypes.c_void_p(fp))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
WindowsError: exception: access violation reading 0xFFFFFFFFFF082B28
>>>
Run Code Online (Sandbox Code Playgroud)

如果这个代码做了我想要的,它将打开并关闭一个文本文件而不会崩溃.

python 64-bit ctypes msvcrt

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

How can I control keyboard repeat delay in a Tkinter root window?

This simple application almost does what I want:

import Tkinter as Tk

def hello(x):
    print "Hello"

root = Tk.Tk()
root.bind("<Up>", hello)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

我将向上箭头捣碎,一遍又一遍地打印出"你好".但是,在重复开始之前有一段延迟,重复率比我想要的慢.如何将此重复延迟设置为零?如何控制重复间隔?

我知道其他Tkinter小部件有'repeatdelay'和'repeatinterval'的配置选项,但我似乎找不到一个Tkinter根窗口.

(我正朝你的方向看,布莱恩奥克利)

python keyboard user-interface tk-toolkit tkinter

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