0

I'm working through https://testdriven.io/developing-an-asynchronous-task-queue-in-python . I've also taken a look at sys.argv[1] meaning in script for clarification on sys.argv

From the former I have:

def save_file(filename, data):
    random_str = uuid.uuid4().hex
    outfile = f'{filename}_{random_str}.txt'
    with open(os.path.join(OUTPUT_DIRECTORY, outfile), 'w') as outfile:
        outfile.write(data)


def get_word_counts(filename):
    wordcount = collections.Counter()
    # get counts
    with open(os.path.join(DATA_DIRECTORY, filename), 'r') as f:
        for line in f:
            wordcount.update(line.split())
    for word in set(COMMON_WORDS):
        del wordcount[word]
    # save file
    save_file(filename, json.dumps(dict(wordcount.most_common(20))))
    # simulate long-running task
    time.sleep(2)
    proc = os.getpid()
    print(f'Processed {filename} with process id: {proc}')


if __name__ == '__main__':
    print(sys.argv, len(sys.argv))
    # print(sys.argv[1], len(sys.argv))
    get_word_counts(sys.argv[1])

When I run it directly with I get:

$ python tasks.py
['tasks.py'] 1
Traceback (most recent call last):
 File "tasks.py", line 46, in <module>
get_word_counts(sys.argv[1])
IndexError: list index out of range

Given that you can see there is only one element in the list, why did the author write the the code in this way?

user1592380
  • 34,265
  • 92
  • 284
  • 515

1 Answers1

1
get_word_counts(sys.argv[1])

Should be

get_word_counts(sys.argv[0])

Indexes start at zero in most languages (including python)

Shardj
  • 1,800
  • 2
  • 17
  • 43