斯隆

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这算是人工智能吗?   java@OnDelete(级联)不处理双向映射(hibernate)   java我怎样才能在基元类型(int)上修复这个等式   java如何初始化PrintWriter数组?   arraylist如何使用java添加敌人   java如何处理2019年的背景地理围栏?   java是否有一个XPath表达式可用于在CDATA区域中导航XML?   Kotlin(Android Studio)中的java选项卡式活动   安卓 java。lang.IllegalArgumentException:provider=网络   广播控制流和主流的java排序   java Apache Nifi无法启动Nifi实例   java我正在尝试将内容作为字符串放入ListView   java阻止mozilla会话还原   java在春季选择引用哪个bean?