Как вызвать программу командной строки python с ячейкой Jupyter - PullRequest
0 голосов
/ 20 декабря 2018

Я использую стороннюю программу, предназначенную для запуска в качестве программы командной строки, которая выводит файлы, которые мне позже понадобятся в моем коде.Я работаю в 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_a или input_b с использованием переменных, это не 'Это не работает, потому что кажется, что ! ожидает буквальную строку, так сказать.

Есть ли более чистый способ сделать это без необходимости изменять исходный код этой программы (я пытался изучить этои код написан так, что не существует простого способа вызвать его основную функцию.)

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Ваш вопрос похож на вопрос:

Как выполнить файл * .PY из файла * .IPYNB на ноутбуке Jupyter?

Вы можетеиспользуйте следующую команду, которая немного хакерская:

%run -i 'create_files.py'

"правильный" способ - использовать метод autoreload .Вот пример:

%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

Надеюсь, это поможет.

0 голосов
/ 20 декабря 2018

На ноутбуке 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)

Я думаю, что пример достаточно ясен, что вы можете адаптироватьэто вам нужно.Надеюсь, поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...