如何在Python中接收命令输出?

如何在Python中接收命令输出?,python,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] pr

我有一个在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
此选项仅在命令执行完成时打印命令处理。但是,我需要命令的输出,因为它正在发生,并在命令完全执行时停止。如何做到这一点?

您可以签出

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

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

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


如果您像这样通过subprocess.Popen调用命令行,但通过更改以下内容将管道传递到sys.stdout,则该命令行应该可以执行:

 stdout=sys.stdout
将管道传递给打开的可写文件对象将保存输出

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

谢谢你的回答。我希望在变量中存储命令的输出,并将其作为json发送到javascript。但是我认为stdin.write()输出在终端本身。它可以存储在变量中,也可以在javascript中传递吗?Thanks@user1881957:您可以将其转储到文件中,并在完成后读取,但如果您想使用变量,根据我的理解,您不能这样做,因为您无法将输出附加到变量,您只能重新分配它,这是您不想要的(它将分配新的输出并覆盖以前存储的输出)我试图用这些数据来显示进度条,所以在完成后读取进度条是没有意义的。我需要一种方式来读取正在发生的进度。我建议您创建一个单独的流程来监控输出的进度,而不是同一个流程,新流程还将负责以图形方式显示进度,新流程将在执行子流程cmd后立即启动,并将一直保持活动状态,直到进度达到100%或用户强制终止itI。有关于这个的教程吗?在JavaScript中也应该很容易使用。