如何使用Jupyter单元调用python命令行程序

问题描述 投票:3回答:2

我正在使用第三方程序,该程序旨在作为命令行程序运行,该程序输出以后需要在我的代码中使用的文件。我在Jupyter Lab工作,希望将函数调用集成到我的代码中。运行此操作的典型方法是:

python create_files.py -a input_a -b input_b -c -d

然后我想在我的Jupyter笔记本中调用它。我已经能够通过使用!来实现它,即:

! python create_files.py -a input_a -b input_b -c -d

这个问题是,当我想使用变量指定input_ainput_b时,这不起作用,因为看起来!期望一个文字字符串,可以这么说。

有没有更简洁的方法来做这个而不必改变这个程序的源代码(我已经尝试过研究它,并且编写代码使得没有简单的方法来调用它的主函数。)

python python-3.x command-line jupyter-notebook
2个回答
1
投票

在Jupyter笔记本上,使用subprocess来运行命令行脚本是这样的:

简单的命令行版本:

 dir *.txt /s /b

在Jupyter笔记本上:

import subprocess
sp = subprocess.Popen(['dir', '*.txt', '/s', '/b'], \
    stderr=subprocess.PIPE, \
    stdout=subprocess.PIPE, \
    shell=True)

(std_out, std_err) = sp.communicate()   # returns (stdout, stderr)

打印出错误消息,以防万一:

print('std_err: ', std_err)

打印出回显消息:

print('std_out: ', std_out)

我认为这个例子很清楚,你可以根据自己的需要进行调整。希望能帮助到你。


0
投票

你的问题类似于:

How to execute a * .PY file from a * .IPYNB file on the Jupyter notebook?

您可以使用以下命令,这有点hacky:

%run -i 'create_files.py'

“正确”的方法是使用自动重载方法。一个例子如下:

%load_ext autoreload
%autoreload 2
from create_files import some_function
output=some_function(input)

自动重载的参考如下:https://ipython.org/ipython-doc/3/config/extensions/autoreload.html

希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.