pipe

nodejs Stream使用手册

喜欢而已 提交于 2020-03-02 18:51:14
介绍 本文介绍了使用 node.js streams 开发程序的基本方法。 "We should have some ways of connecting programs like garden hose--screw in another segment when it becomes necessary to massage data in another way. This is the way of IO also." Doug McIlroy. October 11, 1964 最早接触Stream是从 早期的unix开始的 数十年的实践证明Stream 思想可以很简单的开发出一些庞大的系统。在unix里,Stream是通过 | 实现的;在node中,作为内置的 stream模块 ,很多核心模块和三方模块都使用到。和unix一样, node Stream主要的操作也是 .pipe() ,使用者可以使用反压力机制来控制读和写的平衡。 Stream 可以为开发者提供可以重复使用统一的接口,通过抽象的Stream接口来控制Stream之间的读写平衡。 为什么使用Stream node中的I/O是异步的,因此对磁盘和网络的读写需要通过回调函数来读取数据,下面是一个文件下载服务器 的简单代码: var http = require('http'); var fs =

redis数据批量导出

冷暖自知 提交于 2020-03-02 11:07:57
1数据导出 echo "SMEMBERS key1"| redis-cli >> c.data 2.采用redis-dump导出 数据导入 将c.data的数据通过编辑器转化为相关语句 sadd key1 111111 执行导入cat c.data | redis-cli --pipe http://redis.io/topics/mass-insert 用redis-cli --pipe方式导入,报如下错误 All data transferred. Waiting for the last reply... ERR syntax error Last reply received from server. errors: 1, replies: 1 经调查是因为linux文档的换行是\n,但文档要求每行的结尾是\r\n. 最后用unix2dos命令将文件转换后,再执行redis-cli --pipe,不再出现错误 redis-cli --pipe会报错~(很可能是机器问题~~~~在下用虚拟机跑) ERR Protocol error: too big inline request Error writing to the server: Connection reset by peer 可能是redis的问题https://github.com/gosexy/redis

gulp处理文件

房东的猫 提交于 2020-03-02 10:58:48
通常,我们使用gulp提供的src()和dest()方法处理文件 如: const { src, dest } = require('gulp'); exports.default = function() { return src('src/*.js') .pipe(dest('output/')); } 在项目中,我们经常使用babel格式化下我们的代码,在写入输出的相关目录。 const { src, dest } = require('gulp'); const babel = require('gulp-babel'); exports.default = function() { return src('src/*.js') .pipe(babel()) .pipe(dest('output/')); } 如执行前gulpfile.js文件内容如下: const { src, dest } = require('gulp'); const babel = require('gulp-babel'); function test(){console.log("hello world")} var name = "huangbaokang"; var age=30; obj ={"author":"huangbaokang",age:30} exports.default

函数式 Python 中的 Pipe 与 itertools

萝らか妹 提交于 2020-02-28 17:53:59
1、迭代器与管道函数式编程简介 可迭代器(iterable),不仅限于list/str等,还包括任何包含有yield关键字的函数,后者未必有规律的迭代特征。标准库中的itertools包提供了更加灵活的产生迭代器的工具,这些工具的输入大都是已有的迭代器函数的封装,并且itertools给出的函数都是针对广义迭代器而言。而len()等函数是针对狭义迭代器,即sequence(i.e. str, list, tuple)而言的。 以内置函数range()为例,执行结果会是一次性计算好整个序列。这对于很长的序列来说会比较耗时,甚至带来性能问题。因而,python还提供了内置函数,提供了惰性求值版本,那就是xrange()。它利用yield特性,第一次执行时仅仅返回迭代器,不到用时是不会求值的。 实际上,itertools提供的函数都是惰性的,并且给原内置函数都重写了惰性版本。如imap()对于内置的map()。 扩展库Pipe则对内置函数和部分itertools进行了封装,提供了类似unix bash下的管道式调用风格,更接近人类从左到右的阅读习惯,使得代码更加优雅。其他动态语言,如ruby, c#-lambda java8-lambda也都提供了类似的 链式调用 形式。 另外,也提供了@Pipe装饰器,可以非常方便地扩展出自己的管道函数,或者继续封装其他itertools中的有用函数。

如何摆脱GCC中从字符串常量到'char *''警告的弃用转换?

假如想象 提交于 2020-02-28 06:53:03
所以我正在开发一个非常大的代码库,最近升级到gcc 4.3,它现在触发了这个警告: 警告:不推荐将字符串常量转换为'char *' 显然,解决这个问题的正确方法是找到每个声明 char *s = "constant string"; 或函数调用如: void foo(char *s); foo("constant string"); 并使它们成为 const char 指针。 但是,这意味着触及564个文件,最小,这不是我希望在此时执行的任务。 现在的问题是我正在运行 -werror ,所以我需要一些方法来扼杀这些警告。 我怎样才能做到这一点? #1楼 PyTypeObject PyDict_Type= { ... PyTypeObject PyDict_Type= { PyObject_HEAD_INIT(&PyType_Type), "dict", dict_print, 0, 0 }; 观看名称字段,在gcc中编译时没有警告,但在g ++中它会,我不知道为什么。 在 gcc (Compiling C) ,-Wno-write-strings默认是活动的。 in g++ (Compiling C++) Wwrite-strings默认是活动的 这就是为什么会有不同的行为。 对于我们来说,使用 Boost_python 宏 Boost_python 产生这样的警告。

rxjs6 Combination Operators

烈酒焚心 提交于 2020-02-28 03:25:15
combineAll 组合多个流, 每次有一个流更新时, 发出所有流最新值的数组 const source$ = of(200, 400, 600) source$.pipe( map(v => interval(v)), combineAll() ).subscribe(console.log) combineLatest 由rxjs导入, 和combineAll作用一样, 用于组合最新的观察值 const {combineLatest, interval, of} = require('rxjs') const {map} = require('rxjs/operators') const source1$ = interval(200) const source2$ = interval(400) const source3$ = interval(600) // 可传入数组或者参数式逐个传入 // combineLatest(source1$, source2$, source3$).subscribe(console.log) combineLatest([source1$, source2$, source3$]).subscribe(console.log) concat / concatAll 串行连接流, 只有当前面的流完成后, 才会从继续后面的流中继续取数据

python中调用cmd

送分小仙女□ 提交于 2020-02-27 18:59:27
1. 使用os.system("cmd") 这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息。使用前需要import os。 os.system("ls") 2. 使用Popen模块产生新的process 现在大部分人都喜欢使用Popen。Popen方法不会打印出cmd在linux上执行的信息。的确,Popen非常强大,支持多种参数和模式。使用前需要from subprocess import Popen, PIPE。但是Popen函数有一个缺陷,就是它是一个阻塞的方法。如果运行cmd时产生的内容非常多,函数非常容易阻塞住。解决办法是不使用wait()方法,但是也不能获得执行的返回值了。 Popen原型是: 1 subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=Fal 参数bufsize:指定缓冲。我到现在还不清楚这个参数的具体含义,望各个大牛指点。 参数executable用于指定可执行程序。一般情况下我们通过args参数来设置所要运行的程序

【Python】 子进程创建与使用subprocess

余生长醉 提交于 2020-02-27 17:16:09
subprocess *****本文参考了Vamei大神的http://www.cnblogs.com/vamei/archive/2012/09/23/2698014.html    运用subprocess包可以在运行python的进程下进一步开启一个子进程,创建子进程要注意     1. 父进程是否暂停     2.创建出的子进程返回了什么     3.执行出错,即返回的code不是0的时候应该如何处理   subprocess包提供了三个开启子进程的方法,subprocess.call() , subprocess.check_call() , subprocess.check_output(),给三者传递命令字符串作为参数。可以用(['ping','www.baidu.com','-c','3'])这种列表的形式,同时也可以是("ping www.baidu.com -c 3") 这种形式。在开启子进程的时候,可以加上shell=True的参数来让python开启一个shell,通过shell来解释获得的命令。 一般在windows下运行的程序最好都把shell=True加上,这样才能顺利地执行dos命令,但是linux下似乎不加也没啥关系。因为linux下未指明用shell执行的话会调用/bin/sh来执行,问题不大,但是dos下系统不会默认用cmd.exe来执行命令

rxjs6 Conditional and Boolean Operators & Mathematical and Aggregate Operators

牧云@^-^@ 提交于 2020-02-27 12:43:14
Conditional and Boolean Operators defaultIfEmpty 如果源流在结束时没有发出一个值, 则发出一个默认值 const {of} = require('rxjs') const {defaultIfEmpty} = require('rxjs/operators') of(1, 2, 3).pipe( defaultIfEmpty('abc') ).subscribe(console.log) of().pipe( defaultIfEmpty('abc') ).subscribe(console.log) every 类似数组, 返回值为流中的数据是否都满足某个条件 const {of} = require('rxjs') const {every} = require('rxjs/operators') const source$ = of(1, 2, 3) source$.pipe( every(x => x < 5) ).subscribe(console.log) // true source$.pipe( every(x => x % 2) ).subscribe(console.log) // false find & findIndex 返回第一个满足条件的值/位置, 第一个参数为比较函数,

Get argument from pipe

假如想象 提交于 2020-02-27 05:30:51
问题 Consider having the results from the pipe: find . Now I would like to access in the second command behind the pipe what is actually piped (inputed) and then for example to print it twice. find . | printf $arg$arg\n #each filename would be printed twice per line Please note that the question is not asking about printing whatever once gets from pipe twice, I know how to use bash for loop or write a script that could accomplish the mentioned. How I can get $arg to use it quickly in inline