Список "sys.argv" пустой после импорта sys - PullRequest
0 голосов
/ 24 января 2020

У меня есть скрипт со следующим импортом:

import os
import sys
import numpy as np
import netCDF4
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap


sc = sys.argv[1]
run = sys.argv[2]

...

, когда я его запускаю, он возвращает следующее сообщение об ошибке:

Traceback (most recent call last):

  File "/home/brandonsmith/climate-sensitivity-gcm/plot_scripts/map_lowcloud.py", line 11, in <module>
    sc = sys.argv[1]

IndexError: list index out of range

, поэтому я проверил содержимое списка и его вышел пустой:

In [28]: sys.argv
Out[28]: ['']

Почему?

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Когда вы запускаете программу из командной строки, она получает аргументы из программы командной строки (программа оболочки, такая как bash в * nix, приглашение cmd в Windows). Пример, вероятно, поможет:

> python my_program Brandon GreenMatt

В этом случае вы указываете программе командной строки выполнить python. Аргументы, которые вы указываете python: «my_program», «Brandon» и «GreenMatt». В свою очередь, python пытается найти и запустить программу с именем "my_program", которая получит аргументы "Brandon" и "GreenMatt". Механизм обработки аргументов

Python - sys.argv , Первый аргумент - номер 0, то есть sys.argv [0] - будет именем программы. Другие аргументы будут загружены в sys.argv в порядке их появления в командной строке. Таким образом, в приведенном выше примере my_program увидит «Brandon» в sys.argv [1], а sys.argv [2] будет содержать «GreenMatt».

Когда в командной строке нет аргументов, Например:

> python my_program

, тогда sys.argv [1] и sys.argv [2] не будут содержать ничего, что приведет к появившейся ошибке. Кроме того, если вы загрузите программу в какую-то интерактивную среду Python и просто запустите ее, вы увидите эту ошибку.

Подробнее в документах .

0 голосов
/ 25 января 2020

Для тех, кто использует интерактивную среду Python (например, Spyder, Jupyter), вам необходимо указать параметры командной строки. Я использую Spyder, так что это можно сделать, найдя кнопку «конфигурации на файл» под «вкладкой запуска», затем выбрав «параметры командной строки» и введя то, что будет после команды запуска. Спасибо человеку, опубликовавшему принятый ответ.

...