如何实时接收Python的命令输出?

2024-09-28 20:50:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用Python运行的Linux命令。你知道吗

roc = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', hostname, '/home/zurelsoft/test'], 
                                    stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]
print roc

这将仅在命令执行完成时打印命令处理。但是,我需要命令的输出,因为它正在发生和停止时,命令被完全执行。如何做到这一点?你知道吗


Tags: 命令infohomelinuxpasswordhostnamersyncsubprocess
2条回答

如果您通过调用命令行,它应该可以工作子流程.Popen就像你做的那样,但是把一根管子传给系统标准输出通过改变:

 stdout=sys.stdout

将管道传递给打开的可写文件对象将保存输出。你知道吗

out = open("output.tmp","w")
subprocess.Popen(["ls","-R"],stdout = out)
out = open("output.tmp","r")
output = out.readlines()

您可以签出SelectSelect Example

Python’s select()函数是底层操作系统实现的直接接口。它监视套接字、打开的文件和管道(使用fileno()方法返回有效的文件描述符的任何内容),直到它们变得可读写,或者发生通信错误。你知道吗

select()使得同时监视多个连接更容易,并且比使用套接字超时在Python中编写轮询循环更高效,因为监视发生在操作系统网络层,而不是解释器。你知道吗

如果这对你没有帮助,也可以看看

Persistent python subprocess

How can I read all availably data from subprocess.Popen.stdout (non blocking)?

相关问题 更多 >