仅在 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 项目时有效

python, windows : 用 shlex 解析命令行

Windows 上的 fcntl 替代品

用 Python 编写的 Windows 服务仅在调试模式下工作