斯隆

sopen的Python项目详细描述


什么是sopen?

sopen是一个简单的python2和python3兼容的包,它包装了python的 Popensopen力争成为linux和windows中都可用的跨平台库。

sopen以两种方式之一运行shell命令:

  • “blocking”模式,在shell命令完成之前阻塞。
  • “非阻塞”模式,允许用户在命令运行时查看其输出。

sopen的主要目标是简单。用户不需要考虑管道、队列、线程或使用Popen时出现的任何其他问题(特别是在非阻塞用例中)。

与任何事物一样,简单与折衷并存:

  • 此时,sopen不支持将命令管道化到其他进程(或通过shell管道化命令)。如果需要将命令相互管道化,请使用Popen
  • “阻塞”和“非阻塞”模式的用法不同。
  • 进程返回码此时在非阻塞模式下不可用

阻塞模式使用

这将捕获grep的输出并将其打印到stdout…

fromsopenimportSopen# This blocks until the output of the grep finishes...proc=Sopen('grep foo bar.txt',mode='blocking')forlineinproc.stdout.read().splitlines():print(line)

非阻塞模式使用

非阻塞模式最适合流式输出不间断的命令,或者您可能希望实时响应的进程。此示例捕获ping命令的输出(五个ping)并将其打印到stdout…

fromsopenimportSopenping_addrs='127.0.0.1'proc=Sopen('ping -c 5 -O {0}'.format(ping_addrs),mode='nonblocking')finished=Falsewhilenotfinished:# readline_stdout() is only available in nonblocking mode# The timeout parameter tells sopen how long to wait for output;#    if there is no output before the timeout, None is returned.out=proc.readline_stdout(timeout=0.001)err=proc.readline_stderr(timeout=0.001)if(outisnotNone):print("{}".format(out))if(errisnotNone):print("ERROR {}".format(err))ifproc.stdout_doneandproc.stderr_done:finished=True

sopen真正闪耀的地方是需要生成许多流shell命令并同时监视它们。

下面的示例将同时ping四个地址,并为所有地址打印输出。

fromsopenimportSopenping_addrs=['127.0.0.1','127.0.0.2','127.0.0.3','127.0.0.4']procs=dict()# Spawn pings for all addressesforaddrinping_addrs:proc=Sopen('ping -A -O {0}'.format(addr),mode='nonblocking')procs[addr]=procwhileTrue:foraddr,procinprocs.items():out=proc.readline_stdout(timeout=0.001)err=proc.readline_stderr(timeout=0.001)if(outisnotNone):print("{}".format(out))if(errisnotNone):print("ERROR {}".format(err))

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

推荐PyPI第三方库


热门话题
数组Java For Loop没有输出(我认为)它应该如何输出   java Maven可以在一个模块中打包两个jar,使用相同的文件名但不同的图表集吗?   java OData读取单个实体最佳实践   java为什么我的代码在以下条件下返回false?   java QueryDsl投影元素集合   在为Java Swing元素实现ActionListener时,如何解决静态引用错误?   libGDX设置允许我使用java8,它在Android中崩溃   如何将日期从shell脚本传递到java即时数据类型   java如何向JList添加复选框和图像   java如何编写这个Listview?   java Eclipse每项目构建设置   java如何将spring引导应用程序指向外部jar的logback。xml   java更改EditText的下划线/样式。。。。。不是链接,而是水平滚动文本   java JPQL:使用复合键建模具有多个关系的查询实体   javascript如何获取Java中的最后32个字节   sql检查Java Derby中是否存在架构   java如何从视图中获取MVC Spring控制器中jstl select的所有项   java gson在需要对象时遇到空数组问题