Запятые исчезают из Python 3 sys.argv в Windows - PullRequest
0 голосов
/ 16 октября 2018

У меня есть скрипт на 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 голосов
/ 16 октября 2018

Я предполагаю, что вы используете CMD в Windows.Если это так, разделителями параметров являются пробелы, но также могут быть и другие, такие как Comma (,) или точка с запятой (;).Вы можете найти некоторые детали здесь .Это означает, что они никогда не будут частью аргумента, поэтому вы не сможете сделать console_input.split(',')

. В вашем случае я бы предложил сделать так, как говорит Ник, и процитировать аргументы.Однако, если это будет использоваться людьми, которые не знакомы с командной строкой, рассматривали ли вы в качестве аргумента файл csv, содержащий заголовки видео?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...