在Jupyter Notebook中运行Python脚本,并传递参数

11

我有一个简单的Python脚本,在Jupyter Notebook中运行。然而,我传递给它的参数似乎被忽略了,这导致了异常:

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个回答

26

你需要使用 sys.argv 而不是 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)

命令行 / Jupyter 魔术命令行:

%run two_digits 3 5

或者,稍微不同的输出:
注意:这里使用!前缀来指示jupyter的命令行

!ipython two_digits.py 2 3

输出:(使用魔法命令行 %run)

running two_digits.py ['two_digits.py', '2', '3']
2 3 5

如果您的.py文件在不同的文件夹中,了解以下信息会很有帮助: 更改工作目录,然后运行:%pwd #查看当前工作目录 %cd #切换到您想要的目录 - TkrA

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')

我们有几个选项:
%%!
python calc.py 7 3 +

或者

%run calc.py 7 3 +

或者

!python calc.py 7 3 +

或者在输出中使用路径。
!ipython calc.py 7 3 +

要访问输出,请使用第一种方法%%!。 输出是一个列表(IPython.utils.text.SList)。

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

[Out 1]
['10']

现在你可以使用下划线 '_' 了。

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

[Out 2]
5.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接