Как передать массив в Python через командную строку

Я пытаюсь передать массив питону

import sys
arr = sys.argv[1]
print(arr[2])

Моя команда

python3 test.py [1,2,3,4,5] 0

Я надеюсь, что результат это

2

Тем не менее, это

,

2 ответа

Решение

Элементы argv являются строками, они не анализируются как литералы в программе.

Вы должны просто передать строку через запятую (без скобок):

python3 test.py 1,2,3,4,5 0

а затем использовать split() преобразовать его в массив.

import sys
arr = sys.argv[1].split(',')
print(arr[2])

Аргументы командной строки являются строками. Четные целые числа должны быть преобразованы из строки в int, Если вы используете синтаксис списка, который вы показываете в своем примере, вам нужно будет запустить аргумент через какой-то синтаксический анализатор (ваш собственный анализатор, что-то из ast, или же eval- но не используйте eval). Но есть более простой способ: просто напишите аргументы отдельно и используйте кусок sys.argv как твой список. Аргументы, разделенные пробелами, являются стандартным способом передачи нескольких аргументов в программу командной строки (например, несколько имен файлов для less, rm, так далее.).

python3 test.py -n a b c 1 2 3

Сначала вы должны определить и пропустить аргументы, которые имеют другое назначение (-n в приведенном выше примере), а затем просто оставьте остальные:

arr = sys.argv[2:]
print(arr[3])   # Prints "1"

PS. Вы также должны защитить любой аргумент от оболочки, заключив в кавычки любые символы со специальным значением (*, ;, пробелы, являющиеся частью аргумента и т. д.). Но это отдельная проблема.

Другие вопросы по тегам