如何启动,并通过输入到外部程序(How to launch and pass input to an

2019-07-29 15:42发布

我使用Python执行外部程序。 而且我也想Python的一些击键发送到调用的程序来完成自动登录。

问题是,当我用subprocess.call()来执行外部程序,该程序通过了体系的重点和Python脚本无法回应,直到我关闭了外部程序。

难道你们对此有什么建议吗? 非常感谢。

Answer 1:

使用subprocess.Popen()代替.call()

随着Popen还可以控制标准输入输出错误文件描述符,所以你也许可以与外部程序进行交互。

傻例如:

s = subprocess.Popen(command, stdout=subprocess.PIPE, 
                     stderr=subprocess.PIPE) # The script is not blocked here

# Wait to finish
while s.poll() is None: # poll() checks if process has finished without blocking
    time.sleep(1)
    ... # do something

# Another way to wait
s.wait() # This is blocking

if s.returncode == 0:
    print "Everything OK!"
else:
    print "Oh, it was an error"

一些有用的方法:

Popen.poll()检查子进程已经终止。 设置并返回返回码属性。

Popen.wait()等待子进程终止。 设置并返回返回码属性。

Popen.communicate(输入=无)与进程交互:发送数据到标准输入。 阅读从stdout和stderr数据,达到-的文件结束到。 等待进程终止。 可选的输入参数应该是一个字符串发送给子进程,或无,如果没有数据要发送到的孩子。

更多信息的文档



文章来源: How to launch and pass input to an external program