How to Use Command Line Arguments in Python

Command line arguments let you pass values to a Python script when you run it in a terminal.

This is useful when you want the same script to work with different inputs, such as:

  • a file name
  • a number
  • a short text value
  • a simple command

In this guide, you will learn how to pass arguments to a script, read them with sys.argv, and handle missing input safely.

Quick example

import sys

print(sys.argv)

if len(sys.argv) > 1:
    print("First argument:", sys.argv[1])
else:
    print("No argument was provided.")

sys.argv is a list. Item 0 is the script name. Real user arguments start at index 1.

What command line arguments are

Command line arguments are values you type after the script name when running Python in the terminal.

For example:

python script.py hello 123

In this command:

  • script.py is the Python file
  • hello is the first argument
  • 123 is the second argument

Command line arguments help one script behave differently based on the values you pass in.

They are often used for:

  • file names
  • numbers
  • options
  • simple commands

This page focuses on basic positional arguments with sys.argv, not full argument parsers.

How to run a script with arguments

A common pattern looks like this:

python script.py hello 123

On some systems, you may need:

python3 script.py hello 123

Python receives each space-separated value as a string.

So this command:

python script.py apple banana

passes two arguments:

  • "apple"
  • "banana"

If one argument contains spaces, put it in quotes:

python script.py "hello world"

Without quotes, the terminal treats each word as a separate argument.

If you are new to running scripts from the terminal, see how to run Python code from the command line and IDEs.

Read arguments with sys.argv

To use command line arguments, first import the sys module:

import sys

Then use sys.argv.

sys.argv is a list of strings:

  • sys.argv[0] is the script name or path
  • sys.argv[1] is the first real argument
  • sys.argv[2] is the second real argument

Here is a simple example:

import sys

print(sys.argv)

If you run:

python script.py hello 123

the output will look similar to this:

['script.py', 'hello', '123']

A very important rule: check len(sys.argv) before using an index like sys.argv[1].

That helps you avoid an error if no argument was passed. If you want a deeper explanation, see sys.argv explained.

Simple working example

This example prints all arguments and then reads the first one safely.

import sys

print("All arguments:", sys.argv)

if len(sys.argv) > 1:
    print("First argument:", sys.argv[1])
else:
    print("No argument was provided.")

Run it without arguments

Command:

python script.py

Possible output:

All arguments: ['script.py']
No argument was provided.

Run it with one argument

Command:

python script.py hello

Possible output:

All arguments: ['script.py', 'hello']
First argument: hello

This is a good beginner pattern because it shows exactly what Python receives.

Convert argument types when needed

Arguments from sys.argv always arrive as strings.

That means this:

import sys

print(type(sys.argv[1]))

prints:

<class 'str'>

If you need numbers, convert them.

Convert to int

Use int() for whole numbers:

import sys

if len(sys.argv) > 1:
    number = int(sys.argv[1])
    print(number + 5)
else:
    print("Please provide a number.")

Example command:

python script.py 10

Output:

15

Convert to float

Use float() for decimal numbers:

import sys

if len(sys.argv) > 1:
    number = float(sys.argv[1])
    print(number * 2)
else:
    print("Please provide a number.")

If needed, you can learn more about int() and float().

Handle invalid input safely

If the value is not a valid number, conversion fails.

import sys

if len(sys.argv) > 1:
    try:
        number = int(sys.argv[1])
        print("Number:", number)
    except ValueError:
        print("The argument must be a whole number.")
else:
    print("Please provide a number.")

Example:

python script.py hello

Output:

The argument must be a whole number.

Work with multiple arguments

You can read more than one argument by position.

Example: read a name and an age.

import sys

if len(sys.argv) >= 3:
    name = sys.argv[1]
    age = int(sys.argv[2])

    print("Name:", name)
    print("Age:", age)
else:
    print("Usage: python script.py <name> <age>")

Command:

python script.py Maya 14

Output:

Name: Maya
Age: 14

For positional arguments, order matters.

In this example:

  • the first argument must be the name
  • the second argument must be the age

If the user swaps them, the script may fail or produce the wrong result.

Handle missing arguments safely

A common beginner mistake is writing code like this:

import sys

print(sys.argv[1])

This works only if the user passed at least one argument.

If not, Python raises an error because index 1 does not exist.

A safer version checks the list length first:

import sys

if len(sys.argv) < 2:
    print("Usage: python script.py <value>")
    sys.exit()

print("You entered:", sys.argv[1])

This does three useful things:

  • checks whether input is missing
  • prints a short usage message
  • exits early if required input was not provided

If you want to learn more about stopping a script early, see sys.exit() explained.

If you see an out-of-range error, read how to fix IndexError: list index out of range.

When to use argparse instead

Use sys.argv when your script is simple and you only need a few positional arguments.

For example, sys.argv is fine for:

  • small practice scripts
  • simple command-line tools
  • learning how terminal input works

Use argparse when your script needs features like:

  • named options such as --file
  • optional flags such as --verbose
  • built-in help messages
  • more structured input checking

A good next step is to start with sys.argv, then move to argparse as your tools get bigger.

Common mistakes

Here are some common problems beginners run into:

  • Using sys.argv[1] when no argument was passed
  • Forgetting to import sys
  • Expecting numbers but getting strings
  • Forgetting quotes around arguments with spaces
  • Assuming sys.argv[0] is the first user value

You can test your script with commands like these:

python script.py
python script.py hello
python script.py 10 20
python script.py "hello world"
python3 script.py test

FAQ

What is sys.argv[0] in Python?

It is the script name or script path, not the first user argument.

Are command line arguments strings in Python?

Yes. Values in sys.argv are strings, so convert them if you need numbers.

How do I pass text with spaces?

Wrap the argument in quotes in the terminal, such as "my file.txt".

How do I avoid IndexError with sys.argv?

Check len(sys.argv) before reading a specific index like sys.argv[1].

Should I use sys.argv or argparse?

Use sys.argv for simple scripts. Use argparse for larger tools with named options and help messages.

See also

Once you are comfortable with sys.argv, you can start building small command-line tools. After that, argparse is the natural next step for more advanced scripts.