gpt4 book ai didi

python - 程序在 IDLE 下工作,但在命令行下失败

转载 作者:太空狗 更新时间:2023-10-29 22:19:57 26 4
gpt4 key购买 nike

我正在使用 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]

当我从 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...
Sensor format is standard
>>>

当我从 Windows 命令提示符运行此代码时,我得到以下结果:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\Admin>cd Desktop\code

C:\Users\Admin\Desktop\code>C:\Python27\python.exe test.py
Current directory: C:\Users\Admin\Desktop\code
sys.path:
C:\Users\Admin\Desktop\code
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: 43742176
Setting sensor format...
Traceback (most recent call last):
File "test.py", line 18, in <module>
PCO_api.PCO_GetSensorFormat(camera_handle, ctypes.byref(wSensor))
File "_ctypes/callproc.c", line 936, in GetResult
WindowsError: [Error -1609945086] Windows Error 0xA00A3002

C:\Users\Admin\Desktop\code>

请注意,一些 DLL 调用是有效的,直到我开始设置传感器格式,我们才偏离轨道。

通过检查我正在调用的 DLL 附带的文档,我看到 Windows 错误解码为“缓冲区的 wSize 太小”。 (原文如此)。我不确定这是否相关。以防万一,here's the API documentation .

当我看到“在 IDLE 中工作,在提示时失败”时,我假设一定有一些不同的环境变量设置。我应该检查什么?

编辑:

我在测试代码中添加了 sys.path 和 os.getcwd()。

编辑:

不确定这是否重要,但我加载的 DLL (SC2_Cam.dll) 位于当前工作目录中。此目录中还有另一个 DLL (sc2_cl_me4.dll),我相信它是由 SC2_Cam.dll 加载的。如果我从此目录中删除 sc2_cl_me4.dll,则对 SC2_Cam.dll 的所有调用均无效,包括 PCO_OpenCamera。

编辑:

如果我将上面的代码输入“vanilla”交互式 python 解释器,它也可以工作。我不需要 IDLE 或 ipython 来让它工作。仅调用“python.exe test.py”失败。

最佳答案

您的系统上是否安装了多个版本的 python?当您以交互方式运行和从文件运行时,您可能使用不同的版本。

关于python - 程序在 IDLE 下工作,但在命令行下失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10525304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com