仅在 Windows 上的 python 参数解析问题
Posted
技术标签:
【中文标题】仅在 Windows 上的 python 参数解析问题【英文标题】:python argument parsing issue only on Windows 【发布时间】:2014-07-05 22:53:40 【问题描述】:当我尝试 script 将 CSV 导入 MonetDB 数据库时,作者将其作为 suggested ,它在我的 Mac 上运行良好(来自 Anaconda 发行版的 Python 2.7.6)但它在 Windows 2012 上引发了 error: too few arguments
服务器(来自 Anaconda 的 Python 2.7.5)。
我认为除了--database
之外的所有标志都应该是可选的,另外你需要指定一个文件名——这完全适用于我的 Mac,而不是 Windows。
有什么方法可以解决这个问题?这是argparse
for Windows 的已知问题吗?
或者如果我应该在文件名中转义 \
字符,为什么 Python 不抱怨文件不存在,为什么参数太少? (无论如何,当我在 Windows 批处理文件中指定文件时,我无法轻松地在那里转义 \
。)
为了方便,我重复了脚本的参数解析部分:
parser = argparse.ArgumentParser(description='A "smarter" CSV loader for MonetDB, v.0.3, hannes@cwi.nl, 2014-05')
parser.add_argument('--database', help='Database name to connect to', default='')
parser.add_argument('--port', help='MonetDB TCP port, defaults to 50000', default='50000')
parser.add_argument('--user', help='MonetDB username, defaults to "monetdb"', default='monetdb')
parser.add_argument('--password', help='MonetDB password, defaults to "monetdb"', default='monetdb')
parser.add_argument('--header',action='store_true', help='set if given CSV file has a header in the first line')
parser.add_argument('--yes',action='store_true', help='if set, assume Yes on all questions')
parser.add_argument('files', nargs='+', help='One or many CSV files to be imported')
args = parser.parse_args()
【问题讨论】:
【参考方案1】:对于 Python,Windows 安装不完整,将其放在 PATH 中是不够的。如果一个人在命令行上正确输入python importer.py
,而不仅仅是importer.py
,问题就解决了。另请参阅此答案:https://***.com/a/12421946/938408
奇怪的是解析问题是危险信号,但事实就是如此。
【讨论】:
正如其他 SO 线程中所建议的那样,我将打印sys.argv
以查看 argparse
必须使用的内容。默认情况下它解析sys.argv[1:]
。如果那是空的,argparse
会报错,因为它找不到用于files
的值。以上是关于仅在 Windows 上的 python 参数解析问题的主要内容,如果未能解决你的问题,请参考以下文章
Windows 上的 Python 2.6:如何使用“shell=True”参数终止 subprocess.Popen?
Kestrel 上的 Blazor Windows 身份验证仅在本地工作?在身份验证握手请求之间收到匿名请求
C++ 通用 Windows 应用程序仅在安装驱动器上的 VS2015 项目时有效