Running a Python script in Jupyter Notebook, with arguments passing

36,889

Solution 1

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

Solution 2

%%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
Share:
36,889
user8270077
Author by

user8270077

Updated on December 25, 2020

Comments

  • user8270077
    user8270077 over 3 years

    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
    
  • TkrA
    TkrA over 2 years
    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