通用cli后台帮助程序

bg-helper的Python项目详细描述


安装

% pip3 install bg-helper

用法

需要调用函数时使用bg_helper.call_func。 任意*args**kwargs,并记录任何未捕获的异常。一个 dict返回时带有

  • func_name
  • args
  • kwargs
  • status(确定/错误)

如果函数调用成功,还将有一个value键。 如果出现意外异常,则以下附加键将 在返回指令中提供

  • error_type
  • error_value
  • fqdn
  • func_doc
  • func_module
  • time_epoch
  • time_string
  • traceback_string

当需要启动 长时间运行的python函数或系统命令(如vlcmedia 玩家)在后台。

% ipython
...

In [1]: import bg_helper as bh

In [2]: def lame():
   ...:     return 1/0

In [3]: def blah(*args, **kwargs):
   ...:     return locals()

In [4]: bh.call_func(blah)
Out[4]:
{'args': '()',
 'func_name': 'blah',
 'kwargs': '{}',
 'status': 'ok',
 'value': {'args': (), 'kwargs': {}}}

In [5]: bh.call_func(blah, 'cats', 'dogs')
Out[5]:
{'args': "('cats', 'dogs')",
 'func_name': 'blah',
 'kwargs': '{}',
 'status': 'ok',
 'value': {'args': ('cats', 'dogs'), 'kwargs': {}}}

In [6]: bh.call_func(blah, 'cats', 'dogs', meh=[1, 2, 3, 4, 5])
Out[6]:
{'args': "('cats', 'dogs')",
 'func_name': 'blah',
 'kwargs': "{'meh': [1, 2, 3, 4, 5]}",
 'status': 'ok',
 'value': {'args': ('cats', 'dogs'), 'kwargs': {'meh': [1, 2, 3, 4, 5]}}}

In [7]: bh.call_func(lame)
======================================================================
2017-04-01 12:32:35,107: func=lame args=() kwargs={}
Traceback (most recent call last):
  File "/tmp/here/venv/lib/python3.5/site-packages/bg_helper/__init__.py", line 70, in call_func
    value = func(*args, **kwargs)
  File "<ipython-input-2-ac0fa5de647a>", line 2, in lame
    return 1/0
ZeroDivisionError: division by zero

Out[7]:
{'args': '()',
 'error_type': "<class 'ZeroDivisionError'>",
 'error_value': "ZeroDivisionError('division by zero',)",
 'fqdn': 'x200-purple',
 'func_doc': None,
 'func_module': '__main__',
 'func_name': 'lame',
 'kwargs': '{}',
 'status': 'error',
 'time_epoch': 1491067955.1004958,
 'time_string': '2017_0401-Sat-123235',
 'traceback_string': 'Traceback (most recent call last):\n  File "/tmp/here/venv/lib/python3.5/site-packages/bg_helper/__init__.py", line 70, in call_func\n    value = func(*args, **kwargs)\n  File "<ipython-input-2-ac0fa5de647a>", line 2, in lame\n    return 1/0\nZeroDivisionError: division by zero\n'}

In [8]: cat log--bg-helper.log
2017-04-01 12:32:35,107 - ERROR - call_func: func=lame args=() kwargs={}
Traceback (most recent call last):
  File "/tmp/here/venv/lib/python3.5/site-packages/bg_helper/__init__.py", line 70, in call_func
    value = func(*args, **kwargs)
  File "<ipython-input-2-ac0fa5de647a>", line 2, in lame
    return 1/0
ZeroDivisionError: division by zero

In [9]: bh.SimpleBackgroundTask('echo "hello from console" > /tmp/blahblah.txt')
Out[9]: <bg_helper.SimpleBackgroundTask at 0x7ff112229c18>

In [10]: ls /tmp/blahblah.txt
/tmp/blahblah.txt

In [11]: cat /tmp/blahblah.txt
hello from console

In [12]: bh.SimpleBackgroundTask('echo "$(date)" >> /tmp/blahblah.txt')
Out[12]: <bg_helper.SimpleBackgroundTask at 0x7ff110057cf8>

In [13]: cat /tmp/blahblah.txt
hello from console
Sat Apr  1 12:33:23 CDT 2017

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为textview创建选定状态(突出显示)   Java Hibernate计数行   Java语言中的字符串比较   java为什么SparkLauncher会立即返回而不会生成任何作业?   java layout_centerInParent在抛出回收视图后不工作   c#中的readInt16()与java中的readShort()   java如何在工具栏菜单中添加昼夜切换器   java在eclipse上向Tomcat提供<Realm/>信息   java使用给定的随机路径构造一个图   带有对象推送的java Morphia聚合阶段组   java关闭JTable实例   性能如何更好地转换java中的所有集合元素?   JAVA木卫一。IOException:通过Eclipse读取Java中的EOF Lucene   java如何在Android中将光标设置在tableLayout的行/列中所需的位置   使用HashMap的Set的java迭代器不会生成值/键吗?   java google guava cachebuilder在ExipeAfterAccess和expireActerWrite之间使用的时间更长   如何将这个排序映射方法从java转换为Kotlin   java如何从运行的JAR文件中读取war目录?   SpringBootJava。使用Java 9模块(JPM)时lang.NoSuchMethodError