Python代码在交互式提示中运行,但不是作为脚本运行

Python代码在交互式提示中运行,但不是作为脚本运行,python,libusb-win32,Python,Libusb Win32,我正在尝试使用seabreeze()和pyseabreeze()与海洋光学光谱仪接口 如果我在windows中从命令提示符(cmd)输入python,并逐行输入以下代码,它就会工作。但是,如果我将它放在脚本(spec_test.py)中,并尝试使用“python spec_test.py”从cmd.exe运行它,它将无法工作 我已经到处寻找类似的问题,但似乎没有一个能涵盖我所面临的问题。我运行的是64位Windows 7,使用anaconda安装的python 3.5.2。我还必须安装pyusb

我正在尝试使用seabreeze()和pyseabreeze()与海洋光学光谱仪接口

如果我在windows中从命令提示符(cmd)输入python,并逐行输入以下代码,它就会工作。但是,如果我将它放在脚本(spec_test.py)中,并尝试使用“python spec_test.py”从cmd.exe运行它,它将无法工作

我已经到处寻找类似的问题,但似乎没有一个能涵盖我所面临的问题。我运行的是64位Windows 7,使用anaconda安装的python 3.5.2。我还必须安装pyusb和libusb才能使用pyseabreeze

守则:

import seabreeze
seabreeze.use('pyseabreeze')
import seabreeze.spectrometers as sb

devs = sb.list_devices()
print(devs)
spec = sb.Spectrometer(devs[0])
print(spec.model)
我得到的错误信息是:

[<SeaBreezeDevice USB2000PLUS:FLMS02379>]
Traceback (most recent call last):
  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\seabreeze\pyseabreeze\interfaces\common.py", line 14, in decorated_func
    return func(*args, **kwargs)
  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\seabreeze\pyseabreeze\interfaces\spectrometer.py", line 46, in open
    self.open_device(device.handle)
  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\seabreeze\pyseabreeze\interfaces\communication.py", line 37, in open_device
    device.set_configuration()
  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\usb\core.py", line 869, in set_configuration
    self._ctx.managed_set_configuration(self, configuration)
  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\usb\core.py", line 102, in wrapper
    return f(self, *args, **kwargs)
  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\usb\core.py", line 148, in managed_set_configuration
    self.backend.set_configuration(self.handle, cfg.bConfigurationValue)
  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\usb\backend\libusb0.py", line 493, in set_configuration
    _check(_lib.usb_set_configuration(dev_handle, config_value))
  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\usb\backend\libusb0.py", line 431, in _check
    raise USBError(errmsg, ret)
usb.core.USBError: [Errno None] b'libusb0-dll:err [set_configuration] could not set config 1: win error: The parameter is incorrect.\r\n'
Traceback (most recent call last):

  File "<ipython-input-9-ead886eb3666>", line 1, in <module>
    runfile('C:/Users/Raman Lab/Python code/Spectrometers/spec_testing.py', wdir='C:/Users/Raman Lab/Python code/Spectrometers')

  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
    execfile(filename, namespace)

  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/Raman Lab/Python code/Spectrometers/spec_testing.py", line 7, in <module>
    spec = sb.Spectrometer(devs[0])

  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\seabreeze\spectrometers.py", line 62, in __init__
    self._open_device(device)

  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\seabreeze\spectrometers.py", line 90, in _open_device
    lib.device_open(self._dev)

  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\seabreeze\pyseabreeze\wrapper.py", line 81, in device_open
    return device.interface.open(device)

  File "C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site-packages\seabreeze\pyseabreeze\interfaces\common.py", line 23, in decorated_func
    raise SeaBreezeError(msg)

SeaBreezeError: An error occured during opening.
[]
回溯(最近一次呼叫最后一次):
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\seabree\pyseabree\interfaces\common.py”,第14行,在函数中
返回函数(*args,**kwargs)
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\seabree\pyseabree\interfaces\spectrum.py”,第46行,打开
自动开启装置(装置手柄)
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\seabree\pyseabree\interfaces\communication.py”,第37行,在open\u设备中
设备。设置_配置()
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\usb\core.py”,第869行,在set\U配置中
self.\u ctx.managed\u set\u配置(self,configuration)
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\usb\core.py”,第102行,在包装器中
返回f(自,*args,**kwargs)
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\usb\core.py”,第148行,在托管集配置中
self.backend.set_配置(self.handle、cfg.bConfigurationValue)
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\usb\backend\libusb0.py”,第493行,在set\u配置中
_检查(_lib.usb_set_配置(开发句柄、配置值))
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\usb\backend\libusb0.py”,第431行,在检查中
升起USBError(errmsg,ret)
usb.core.USBError:[Errno None]b'libusb0-dll:err[set_configuration]无法设置配置1:win错误:参数不正确。\r\n
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
运行文件('C:/Users/Raman-Lab/Python-code/Spectrometers/spec_-testing.py',wdir='C:/Users/Raman-Lab/Python-code/Spectrometers')
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\spyder\utils\site\sitecustomize.py”,第866行,在runfile中
execfile(文件名、命名空间)
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\spyder\utils\site\sitecustomize.py”,第102行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/Raman Lab/Python code/Spectrometers/spec_testing.py”,第7行,在
spec=sb.光谱仪(devs[0])
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\seabree\spectrometers.py”,第62行,在uu init中__
自开装置(装置)
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\seabreeze\spectrometers.py”,第90行,在开放式设备中
lib.device\u open(self.\u dev)
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\seabree\pyseabree\wrapper.py”,第81行,在设备\u open中
返回设备.接口.打开(设备)
文件“C:\Users\Raman Lab\AppData\Local\Continuum\Anaconda3\lib\site packages\seabree\pyseabree\interfaces\common.py”,第23行,修饰函数
raise SEABREZEERROR(消息)
SeaBreezeError:打开时发生错误。
谢谢你的帮助

编辑:
出于某种原因,我明白了这一点,认为这可能有助于描述问题。如果我从cmd.exe输入InteractivePython并粘贴代码,而不是手动输入,则会出现相同的错误。这让我觉得(很可能是我错了)这与进口的速度有关。我尝试在第3行和第5行之间添加几秒钟的睡眠,以模拟在提示符中键入时发生的情况,但这没有帮助。我希望这足以说明问题。

你最初的猜测并不遥远。然而,在Windows7上,我遇到了与Python2.7完全相同的问题。链接到的示例代码gchaks运行良好。 当我连续几次尝试快速执行脚本时,错误消息发生了变化,并指向一个空的设备列表。之后我增加了2秒的延迟

devs=sb.列出设备()

这就解决了问题。顺便说一句,你的代码在Linux机器上运行得很好


另一个提示:如果您的代码应该运行一次,但随后遇到另一条错误消息,请确保关闭设备连接或dis-并重新连接光谱仪。

这看起来像是路径问题。检查以确保您可能需要的任何dll都包含在路径中。我认为代码不会产生该错误消息。回溯的第一行提到spec_sample_plot.py,第10行。您提供的代码只有8行。请复制粘贴产生错误的确切程序。@Robᵩ 我在代码中有一些我没有在这里发布的注释,说明了行号不匹配的原因。我已经编辑了这篇文章,只包含了这段代码的错误读数。错误似乎与libusbdll有关。没有海风,pyusb对你有用吗?一些来自教程的代码。如果没有,则可能libusbdll不在path环境变量中。@gchaks一旦有机会,我将检查该教程中的一些代码。如果是这样的话,为什么在pythonshell中逐行输入程序时它会工作呢?