Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows中,逗号从Python 3 sys.argv中消失_Python_Python 3.x_Windows - Fatal编程技术网

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

在Windows中,逗号从Python 3 sys.argv中消失,python,python-3.x,windows,Python,Python 3.x,Windows,我在Python3.7中有一个脚本,它基于在sys.argv中传递给它的参数运行。这些参数是视频标题,因此几乎总是包含空格:因此我使用逗号作为除数,并使用split(',')将它们分开 这在bash中工作得很好,但当我将脚本发送给同事时,它无法将字符串拆分到他放置逗号的位置。出于测试目的,我编写了另一个简单脚本: import sys print('Number of arguments: '+str(len(sys.argv))) for arg in sys.argv: print(

我在Python3.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
在他的(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
变量中。我不确定这是否是导致这种行为的原因。

我假设您在Windows上使用CMD。如果是,参数分隔符是空格,但也有一些其他分隔符,如逗号(,)或分号(;)。你可以找到一些细节。这意味着它们永远不会成为参数的一部分,因此您将无法执行
console\u input.split(',')


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

您是否尝试过在运行时将参数加引号?我会让他这样做,并报告结果。如果没有必要在参数周围加上引号,我更希望脚本能够自动完成一项枯燥耗时的任务,因此不熟悉命令行的人可以使用它,因此,我希望它尽可能简单,但如果这是必要的,我可以使用它。需要更新的标题的特定子集每次都会发生变化,因此我认为CSV文件可能会增加另一层复杂性,并可能让人困惑,除非我误解了你的意思;如果用户在没有参数的情况下运行程序,我可能会添加一些提示,提示用户输入标题列表。这样,他们可以自己选择是在列表周围加引号更容易,还是在启动脚本后键入更容易。谢谢你解释为什么它不起作用!您链接到了一个关于cmdshell和相关实用程序的页面。在这种情况下,实际上没有问题。CMD不会从传递给Python的命令行中删除逗号。我只能在PowerShell中重现这个问题,PowerShell已成为Windows 10中的默认shell。在那里,可以使用倒勾(例如
python test.py Foo Bar`,Baz
)或引号(例如
python test.py Foo“Bar,Baz
)对其进行转义。