python subaccess模块的简单用法

singlesp的Python项目详细描述


单个子流程使用模块。

作者:Moises P.Senamoisespsena@gmail.com

许可证:麻省理工学院

示例

fromsinglespimport*

实例化

p=Proc('date')# orp=Proc(['echo',__file__])

标准输出

对于setstdout回调,请使用>运算符。

print(p.read())# orprint(p.wait().read())# orprint(p.run().wait().read())defcb_out(proc):forlineinproc.out:print("STDOUT: %r"%line)Proc('date',callbacks=[cb_out]).wait()defcb_outreader(reader):forlineinreader:print("STDOUT: %r"%line)(Proc('date')>cb_outreader).wait()# orp=Proc('date')>cb_outreaderp.wait()

缓冲区

defcb_outreader(reader):fordatainreader(10):print("STDOUT: %r"%data)(Proc('date')>cb_outreader).wait()

标准差

对于setstderr回调,请使用>>运算符。

defcb_errreader(reader):fordatainreader:print("ERR: %r"%data)(Proc('date')>>cb_outreader).wait()

stdout和stderr回调

defcbo(reader):fordatainreader:print("OUT: %r"%data)defcbe(reader):fordatainreader:print("ERR: %r"%data)(Proc('echo out data;echo err data >&2;')>cbo>>cbe).wait()

回调

# async read stdout and stderrdefcb_stdout(proc):forlineinproc.out:print("STDOUT: %r"%line)defcb_stderr(proc):forlineinproc.err:print("STDERR: %r"%line)Proc('seq 1 3 | while read l; do echo "i= $l"; echo "i in err: $l" >&2; done',callbacks=[cb_stdout,cb_stderr]).wait()

许多命令是异步的

Proc('echo CMD-1: first command with sleep 1; sleep 1; echo CMD-1: done',callbacks=[cb_stdout,cb_stderr]).run()Proc('echo CMD-2: show date; date; echo CMD-2: done',callbacks=[cb_stdout,cb_stderr]).run()# wait all callbacksprint("before wait")wait()print("done")
< H2>获取退出状态
p=Proc('date').run().wait()# or p = Proc('date').wait()print(p.status)

管道

简单:

(Input(['God ','is ','Love!!'])|Proc(['cat'])).read()defcb_stdout(reader):forlineinreader:print("STDOUT: %r"%line)p=Proc('seq 1 3')|Proc('grep 2')>cb_stdout# or p = Proc('seq 1 3').pipe(Proc('grep 2')) > cb_stdoutp.run()wait()print(Input(['God ','is ','Love!!'])|Proc(['cat'])).read()defgen():yield'God 'yield'is 'yield'Love!!'print(Input(gen())|Proc(['cat'])).read()print(Commands(['date'])|Proc(['bash'])).read()print(Commands(['date'])|bash()).read()print(Commands(['date'])|sh()).read()wait()

简单:

p=Proc('seq 1 3')|Proc('grep 2')>cb_stdoutp.run()wait()

复杂:

defcb_stdout(proc):forlineinproc.out:print("STDOUT: %r"%line)defa_stderr(proc):forlineinproc.err:print("A-STDERR: %r"%line)defb_stderr(proc):forlineinproc.err:print("B-STDERR: %r"%line)p=Proc('echo "[A] error message" >&2;seq 1 3',callbacks=[a_stderr])| \
    Proc('while read l; do echo "i= $l"; echo "[B] i in err: $l" >&2; done',callbacks=[cb_stdout,b_stderr])p.run()wait()

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

推荐PyPI第三方库


热门话题
java我想访问同一类的不同函数中的函数变量   创建字段/值哈希映射的java反射   java Velocity工具向后兼容性?   cmd JAVA运行时错误:发生JNI错误   java spring引导示例hateoas不工作   java为什么Android Studio和gradle可以使用不同的类路径进行单元测试?   java Selenium Firefox驱动程序初始化   java如何在jar中重新定位gradle依赖项的包   java为什么我的单线程hello world应用程序使用22个OS线程?   正则表达式替换Java字符串中的特殊字符   在任何派生类的构造函数之后运行方法的java   java从输入字符串中找出日期   带有libGdx(Java)音乐的安卓studio可以在Android模拟器上工作,但不能在桌面上工作   java我在getconnection的参数方面有错误吗?   java使用JFileChooser访问选定文件   java如何将Json解析为另一个活动   java使用Resources for html和rest server   java更新列表,列表内容来自循环中的方法   java如何在GLSL中读取完整范围的32位整数纹理