逗号从Windows中的Python 3 sys.argv中消失

时间:2018-10-16 15:55:46

标签: python python-3.x windows

我在Python 3.7中有一个脚本,该脚本基于在sys.argv中传递给它的参数运行。这些参数是视频标题,因此几乎总是包含空格:因此,我使用逗号作为分隔符,并使用split(',')分隔它们。

这在bash中工作正常,但是当我将脚本发送给同事时,它无法在他放置逗号的位置分割字符串。我编写了另一个简单的脚本用于测试:

import sys

print('Number of arguments: '+str(len(sys.argv)))

for arg in sys.argv:
  print(arg)

console_input = ' '.join(sys.argv[1:]).strip()
print('Combined: '+console_input)
print('Divided: ')
for divided_arg in console_input.split(','):
  print('- '+divided_arg.strip())

在计算机上,当我键入python3 test.py Foo Bar, Baz时,将返回以下内容:

Number of arguments: 4
/Users/michael/test.py
Foo
Bar,
Baz
Combined: Foo Bar, Baz
Divided:
- Foo Bar
- Baz

在HIS(Windows 10)计算机上,它将返回此值:

Number of arguments: 4
C:\Users\john\Downloads\test.py
Foo
Bar
Baz
Combined: Foo Bar Baz
Divided:
- Foo Bar Baz

因此,在我看来Windows会在将参数传递给Python之前从逗号中去除逗号,除非我处理sys.argv的方式中没有出现问题。有人知道如何解决此问题吗?

我应该注意,当他安装Python时,他必须在注册表编辑器中手动将可执行文件添加到$PATH变量中。我不确定这是否可能是这种行为的原因。

1 个答案:

答案 0 :(得分:1)

我假设您在Windows上使用CMD。如果是这样,则参数定界符是空格,但也可以是其他一些定界符,例如Comma(,)或Semicolon(;)。您可以找到一些详细信息here。这意味着它们将永远不会成为参数的一部分,因此您将无法执行console_input.split(',')

对于您的情况,我建议按照尼克所说的那样做,并引述论点。但是,如果不熟悉命令行的人会使用它,您是否考虑过将包含视频标题的csv文件用作参数?