Linux和python3的替代pexpect

processcontroller的Python项目详细描述


快速启动

安装软件包:

pip install --user processcontroller

导入主类:

fromprocesscontrollerimportProcessController

创建新实例:

process_controller=ProcessController()

processcontroller()实例

方法

  • run()方法:

    Run a program (command and options detailed below)

process_controller.run(command,options)
  • send()方法:

    Send a string or bytearray to the subprogram stdin, you will usually use it inside a callback or in detached state

process_controller.send(str|bytes)
  • close()方法:

    Close the stdin of the subprogram so it reaches EOF, you will usually use it inside a callback or in detached state

process_controller.close()
  • kill()方法:

    Sends signal SIGKILL to the subprogram, the return_value should be (pid, 9) after that. (this should not be so used to be honest)

process_controller.kill()
  • wait()方法:

    Used to synchronise the caller with the detached instance of ProcessController Waits for the queue buffer to be handled and emptied. If your process reads stdin such as bash or things like cat, be sure to call close() or you’ll end up with an infinite loop here

process_controller.wait()

属性

  • 返回u值

    是子程序的返回值 -(0,0)如果正在运行 -(PID,状态)如果终止

功能参数

processcontroller.run()

命令

命令参数必须是如下数组:

['/usr/bin/python','file.py']

选项

目前,它支持以下键:“when”、“input”、“echo”和“detached”

  • 时间:

此键用于侦听子程序stdout上发生的事件。 值必须是一个事件数组 “事件”实际上是某种模式的匹配:

'when':[['^SomeRegex.*\n',callback],['^An other one.\n',cb]['^prompt>\$ $',cb]]

注意结尾行,每次向缓冲区添加字符时都会调用match,这有助于匹配提示 也许我会增加一个选项,以避免在未来进行如此大规模的手术 每次找到“n”字符时,该行都会被处理一次并重置为“”

将使用两个参数调用回调:processcontroller实例和匹配的字符串:

defcallback(processcontroller,string)

当子程序需要时,可以使用processcontroller实例的send函数在回调中自动执行用户输入:

defcb(p,s):c.send('some input')
  • 输入:

此键用于在运行子程序之前预先填充该子程序的标准输入:

pc=ProcessController()pc.run(['/bin/bash'],{'input':'echo test && exit'})

您可以设置输入数组:

'input':['one','two','three']# sends "one\ntwo\nthree\n"

您可以输入str或bytes,转换将为您处理

  • 回声:

此键是默认为false的布尔值。 当设置为true时,processcontroller将打印发送到子程序的输入,并在子程序中询问它

  • 分离:

此键用于使程序在其自己的线程中运行,使调用不阻塞地运行:

process_controller.wait()pc=ProcessController()pc.run(['/bin/bash'],{'detached':True})pc.send('echo test')# will print test to stdoutpc.close()# close stdin of subprogram, so that bash will read EOF
  • 私人电话:

此键用于防止在主stdout上写入子程序stdout, 在when事件侦听器的帮助下,用户仍然可以打印所需的内容,实际上,输出的行将保留在回调函数的参数中

  • 读取模式:

使用此键逐字符或逐行读取子标准输出(默认) 它的值可以是'line'或'char' 有助于阅读提示或任何不以下线结束的内容

  • 解码:

此选项用于告诉processcontroller是否解码从子程序中读取的内容,默认为true

不要忘记,每次要执行新的子程序时,都必须创建一个新实例processcontroller

请随意阅读测试和代码,以便更好地理解

享受

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

推荐PyPI第三方库


热门话题
java遍历数组并检查项的值   在名为“”的DispatcherServlet中找不到URI为[/api/encodedurl]的HTTP请求的java映射   java如何在所有JUnit测试中集成Spring Instrument javaagent   java从Axis2生成的存根获取端点URL   使用Gson从JSON转换为POJO的java问题   java如何在安卓中循环声音   java客户端中的elasticsearch geohash方面   我想用Java从右向左打印*请提供输入   java在安卓中上传一个或多个图像   调试如何在Netbeans中调试Java Web应用程序?   创建2个单例Java类实例   java Android Studio:膨胀类片段时出错(加载活动\主UI时程序崩溃)   来自javajarmyapp的命令行。jar选项到myApp选项   java调用setLocationEnabled在另一个按钮中