Как передать массив в 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. Вы также должны защитить любой аргумент от оболочки, заключив в кавычки любые символы со специальным значением (*
, ;
, пробелы, являющиеся частью аргумента и т. д.). Но это отдельная проблема.