3.0.0-f75fda4
。2.7.9
| Anaconda 2.2.0
(64位)| 我在Python中使用undaqtools
模块。包页面为here。该软件包包含将数据采集文件(DAQ)从驾驶模拟器输出转换为HDF5格式的功能。根据包页面,有两种方法可以实现。一种方法是使用函数daq.read
和daq.write_hd5
逐个转换文件。我已经好几次使用它,它完美无瑕。第二种方法是使用脚本undaq.py
同时批量转换许多DAQ文件。此脚本位于C驱动器中的/Anaconda/Scripts/
(Windows 7)。我在DrivingSimulator/Data
文件夹中有3个DAQ文件,名为:
所以,我首先将目录更改为DrivingSimulator/Data
。然后根据包的Getting Started页面,在IPython中尝试undaq.py *
命令,这给出了错误:
%run C:/Users/durraniu/Anaconda/Scripts/undaq.py *
usage: undaq.py [-h] [-n NUMCPU] [-o OUTTYPE] [-e ELEMFILE] [-r] [-d] path
undaq.py: error: unrecognized arguments: Cars_20160601_02.daq Cars_20160601_03.daq
An exception has occurred, use %tb to see the full traceback.
SystemExit: 2
以下是完整的追溯:
%tb
---------------------------------------------------------------------------
SystemExit Traceback (most recent call last)
C:\Users\durraniu\Anaconda\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc, compiler)
205 filename = fname
206 compiler = compiler or compile
--> 207 exec(compiler(scripttext, filename, 'exec'), glob, loc)
208
209 else:
C:\Users\durraniu\Anaconda\lib\site-packages\undaqtools-0.2.3-py2.7.egg\EGG-INFO\scripts\undaq.py in <module>()
2 # EASY-INSTALL-SCRIPT: 'undaqtools==0.2.3','undaq.py'
3 __requires__ = 'undaqtools==0.2.3'
----> 4 __import__('pkg_resources').run_script('undaqtools==0.2.3', 'undaq.py')
C:\Users\durraniu\Anaconda\lib\site-packages\setuptools-18.4-py2.7.egg\pkg_resources\__init__.py in run_script(self, requires, script_name)
733 ns.clear()
734 ns['__name__'] = name
--> 735 self.require(requires)[0].run_script(script_name, ns)
736
737 def __iter__(self):
C:\Users\durraniu\Anaconda\lib\site-packages\setuptools-18.4-py2.7.egg\pkg_resources\__init__.py in run_script(self, script_name, namespace)
1657 )
1658 script_code = compile(script_text, script_filename,'exec')
-> 1659 exec(script_code, namespace, namespace)
1660
1661 def _has(self, path):
C:\Users\durraniu\Anaconda\lib\site-packages\undaqtools-0.2.3-py2.7.egg\EGG-INFO\scripts\undaq.py in <module>()
C:\Users\durraniu\Anaconda\lib\argparse.pyc in parse_args(self, args, namespace)
1702 if argv:
1703 msg = _('unrecognized arguments: %s')
-> 1704 self.error(msg % ' '.join(argv))
1705 return args
1706
C:\Users\durraniu\Anaconda\lib\argparse.pyc in error(self, message)
2372 """
2373 self.print_usage(_sys.stderr)
-> 2374 self.exit(2, _('%s: error: %s\n') % (self.prog, message))
C:\Users\durraniu\Anaconda\lib\argparse.pyc in exit(self, status, message)
2360 if message:
2361 self._print_message(message, _sys.stderr)
-> 2362 _sys.exit(status)
2363
2364 def error(self, message):
SystemExit: 2
我无法理解这个错误。此外,我尝试在CMD中使用undaq.py
,但是打开了一个新窗口,说Windows无法打开此文件:
请让我知道我做错了什么?另请注意,Script
文件夹和Python的路径已经在系统变量的PATH变量中。
按照@hpaulj的指示,我做了以下事项:
## Changing to the directory containing DAQ files:
%cd C:/Users/durraniu/Documents/DrivingSimulator/Data
## Running the undaq.py script:
%run C:/Users/durraniu/Anaconda/Scripts/undaq.py -r -d \\*
这给了我以下输出:
Glob Summary
--------------------------------------------------------------------
hdf5
daq size (KB) exists
--------------------------------------------------------------------
--------------------------------------------------------------------
debug = True
rebuild = True
Converting daqs with 1 cpus (this may take awhile)...
Debug Summary
Batch processing completed.
--------------------------------------------------------------------
Conversion Summary
--------------------------------------------------------------------
Total elapsed time: 0.1 s
Data converted: 0.000 MB
Data throughput: 0.0 MB/s
--------------------------------------------------------------------
似乎脚本无法“看到”Data目录中的任何文件。我在带有前缀python
的cmd中尝试了相同的操作,它给出了相同的结果。我该如何解决这个问题?
供大家参考,我在这里粘贴了undaq.py
文件的内容:
#!C:\Users\durraniu\Anaconda\python.exe
# EASY-INSTALL-SCRIPT: 'undaqtools==0.2.3','undaq.py'
__requires__ = 'undaqtools==0.2.3'
__import__('pkg_resources').run_script('undaqtools==0.2.3', 'undaq.py')
请注意我安装了0.2.3版本的undaqtools。
我也曾在Ipython中尝试过:
%run -G C:/Users/durraniu/Anaconda/Scripts/undaq.py -r -d *
答案 0 :(得分:1)
使用简单的脚本echo_argv.py
:
import sys
print(sys.argv)
使用命令行在Ipython中运行它:
In [1222]: %run echo_argv *
['echo_argv.py', 'stack38002264.py', 'stack37714032.py', 'test', 'stack37930737.py ...]
表明它获得了sys.argv
中的完整目录列表。
您的第一个错误是由undaq.py
的命令行解析器生成的(因此argparse
错误堆栈。)
usage: undaq.py [-h] [-n NUMCPU] [-o OUTTYPE] [-e ELEMFILE] [-r] [-d] path
undaq.py: error: unrecognized arguments: Cars_20160601_02.daq Cars_20160601_03.daq
此消息告诉我undaq
需要一个path
参数,该参数由第一个文件名满足:&#39; 160601_02.daq&#39;。其他文件名因此是多余的,它正在抱怨。
我怀疑如果只提供一个文件名或当前目录名,它会运行得更好,如:
%run undaq.py .
%run undaq.py Cars_20160601_01.daq
我希望你在CMD中得到同样的错误
python undaq.py *
我不明白为什么1 getting started
页面建议在命令行解析器提供此错误消息时使用*
。我想知道是否存在版本差异 - 文档页面是针对不同版本的。
考虑做
python undaq.py -h
%run undaq.py -h
获得更全面的帮助信息。
https://github.com/rogerlew/undaqTools/blob/master/undaqTools/scripts/undaq.py
查看此代码,argparse
参数的path
定义为
parser.add_argument('path', type=str, help='Path for glob ("*")')
这表明正确的调用是引用'*'
所以它按原样传递给脚本,而不是由shell评估
python undaq.py '*'
但是我在使用%run
时遇到了同样的问题。
undaq.py
有自己的glob
,所以它需要一个路径字符串,而不是shell glob
生成的完整列表。
这里有%run
关于globing的内容:
Arguments are expanded using shell-like glob match. Patterns
'*', '?', '[seq]' and '[!seq]' can be used. Additionally,
tilde '~' will be expanded into user's home directory. Unlike
real shells, quotation does not suppress expansions. Use
*two* back slashes (e.g. ``\\*``) to suppress expansions.
To completely disable these expansions, you can use -G flag.
所以我需要这样做:
In [1236]: %run echo_argv \\*
['echo_argv.py', '*']
In [1237]: %run -G echo_argv *
['echo_argv.py', '*']
答案 1 :(得分:0)
您不应该在ipython中运行undaq
。这是一个独立的脚本。
要运行python程序,您需要使用python解释器。典型的python安装将.py文件与python解释器关联起来。但是,似乎在您的系统上没有发生这种情况。
通过在命令行提示符下运行python
来检查是否安装了python(您应该获得有关python版本和>>>
提示符的一些信息)。退出python然后输入:
python undaq.py *
这将加载python解释器并告诉它读取并执行文件undaq.py
中的命令,将当前目录中的所有文件作为参数传递。