2

我有在 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

这仅在完成执行时打印命令处理。但是,我想要命令的输出,因为它正在发生并在命令完全执行时停止。怎么做?

4

2 回答 2

3

您可以查看选择选择示例

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

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

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

持久的python子进程

如何从 subprocess.Popen.stdout 读取所有可用数据(非阻塞)?

于 2012-12-19T05:55:30.190 回答
0

如果您像这样通过 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()
于 2012-12-19T10:35:39.947 回答