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
In Python, arguments are passed to a script from the command line using the sys package. The argv member of sys ( sys. argv ) will store all the information in the command line entry and can be accessed inside the Python script. Python's getopt module can also be used to parse named arguments.
To run a piece of code, click on the cell to select it, then press SHIFT+ENTER or press the play button in the toolbar above. Additionally, the Cell dropdown menu has several options to run cells, including running one cell at a time or to run all cells at once.
IPython has a cell magic, %%capture , which captures the stdout/stderr of a cell. With this magic you can discard these streams or store them in a variable. By default, %%capture discards these streams. This is a simple way to suppress unwanted output.
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
%%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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With