11

I have this simple Python script which I run from my Jupyter Notebook. However the arguments I pass to it seemingly are ignored and this results in an exception:

two_digits.py

import sys
input = sys.stdin.read()
tokens = input.split()
a = int(tokens[0])
b = int(tokens[1])
print(a + b)

%run two_digits 3 5

ndexError                                Traceback (most recent call last)
D:\Mint_ns\two_digits.py in <module>()
      5 tokens = input.split()
      6 
----> 7 a = int(tokens[0])
      8 
      9 b = int(tokens[1])

IndexError: list index out of range

2 Answers 2

28

You need to use sys.argv instead of sys.stdin.read():

two_digits.py

import sys
args = sys.argv  # a list of the arguments provided (str)
print("running two_digits.py", args)
a, b = int(args[1]), int(args[2])
print(a, b, a + b)

command line / jupyter magic line:

%run two_digits 3 5

or, with a slightly different output:
Note: this uses a ! prefix to indicate command line to jupyter

!ipython two_digits.py 2 3

output: (using magic line %run)

running two_digits.py ['two_digits.py', '2', '3']
2 3 5
Sign up to request clarification or add additional context in comments.

1 Comment

Good to know, if you have your .py in a different folder: Change workdir, then run: %pwd #look at the current work dir %cd #change to the dir you want
6
%%file calc.py

from sys import argv

script, a, b, sign = argv

if sign == '+': 
    print(int(a) + int(b))
elif sign == '-':
    print(int(a) - int(b))
else:
    print('I can only add and subtract')

We have several options:

%%!
python calc.py 7 3 +

or

%run calc.py 7 3 +

or

!python calc.py 7 3 +

or with the path in output

!ipython calc.py 7 3 +

To access the output use the first way with %%!. Output is a list (IPython.utils.text.SList)

[In 1]
%%!
python calc.py 7 3 +

[Out 1]
['10']

Now you can use underscore '_'

[In 2]
int(_[0])/2  # 10 / 2

[Out 2]
5.0

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.