2017-12-14 4 views
2

Jupyter 노트북 셀에서 클릭 라이브러리를 사용하는 방법이 있습니까? 노트북 내의 내 Jupyter 노트북 코드에 플래그를 전달하여 으로 전환하여 독립 실행 형 스크립트로 부드럽게 전환 할 수 있습니다. 예를 들어, Jupyter 노트북 세포에서 OptionParser를 사용하여 :jupyter 노트북 셀에 클릭 라이브러리 사용

from optparse import OptionParser 
import sys 


def main(): 
    parser = OptionParser() 
    parser.add_option('-f', '--fake', 
        default='False', 
       help='Fake data') 
    (options,args) = parser.parse_args() 
    print('options:{} args: {}'.format(options, args)) 
    if options.fake: 
     print('Fake detected') 

def test_args(): 

    print('hello') 

if __name__ == '__main__': 

    sys.argv = ['--fake', 'True' '--help'] 
    main() 

출력 : 옵션 : { '가짜': '거짓'} 인수 : [ '트루 - 도움'] 가짜

검출 클릭 라이브러리를 사용하면 오류가 발생합니다.

import click 

@click.command() 
@click.option('--count', default=1, help='Number of greetings.') 
@click.option('--name', prompt='Your name', 
      help='The person to greet.') 
def hello(count, name): 
    """Simple program that greets NAME for a total of COUNT times.""" 
    for x in range(count): 
     click.echo('Hello %s!' % name) 

if __name__ == '__main__': 
    hello() 

OUPUT (절단) : 나는 Jupyter 노트북 세포에서이 코드를 실행

UnsupportedOperation      Traceback (most recent call last) 
<ipython-input-6-ad31be7bf0fe> in <module>() 
    12 if __name__ == '__main__': 
    13  sys.argv = ['--count', '3'] 
---> 14  hello() 

~/.local/lib/python3.6/site-packages/click/core.py in __call__(self, *args, **kwargs) 
    720  def __call__(self, *args, **kwargs): 
    721   """Alias for :meth:`main`.""" 
--> 722   return self.main(*args, **kwargs) 
    723 
    724 
... 
257 
    258  if message: 
--> 259   file.write(message) 
    260  file.flush() 
    261 

UnsupportedOperation: not writable 

답변

1

당신은 새로운 파이썬 propcess 시작 %%python 마법 명령을 사용할 수 있습니다

%%python 

import sys 
import click 

@click.command() 
@click.option('--count', default=1, help='Number of greetings.') 
@click.option('--name', prompt='Your name', 
      help='The person to greet.') 
def hello(count, name): 
    """Simple program that greets NAME for a total of COUNT times.""" 
    with open('echo.txt', 'w') as fobj: 
     for x in range(count): 
      click.echo('Hello %s!' % name) 

if __name__ == '__main__': 
    # first element is the script name, use empty string instead 
    sys.argv = ['', '--name', 'Max', '--count', '3'] 
    hello() 

출력 :

Hello Max! 
Hello Max! 
Hello Max! 
+0

감사합니다. – oppy

관련 문제