从 python 执行 cmd 并获得连续输出
Execute cmd from python and get continuous output
这是我的问题:我需要从 python 执行一个 cmd 命令,该命令执行得不是很快,它会 运行 更长的时间。我需要的是#1 执行命令并#2 获取该命令的连续输出的方法。
输出示例:
一些文字...(然后等待大约半分钟)
一些其他文字...(等待一段时间)
更多文字...
你明白了,输出大约每 30 秒出现一次。我需要捕获所有输出并对它们进行处理。有办法吗?
我知道我可以使用 os.system('command') 执行命令,但我正在努力寻找读取输出的方法!
this answer 中给出了一个简单的解决方案。
在 python 3 中它会是这样的:
#!/usr/bin/env python3
import subprocess
proc = subprocess.Popen('./your_process', stdout=subprocess.PIPE)
while True:
line = proc.stdout.readline()
if not line:
break
else:
# Do whathever you need to do with the last line written on
# stdout by your_process
print("doing some stuff with...", line)
print("done for this line!")
当然,您仍然需要考虑生产者进程如何缓冲 stdout
,即子进程是否类似于
#include <stdio.h>
#include <unistd.h>
int main()
{
for (int i = 1; i < 10000000; i++) {
printf("ping");
sleep(1);
}
}
消费者脚本只会一起读取很多“ping”(这可以通过循环中的 fflush(stdout)
来解决。)
可以在 this answer 中找到更复杂的解决方案。
这是我的问题:我需要从 python 执行一个 cmd 命令,该命令执行得不是很快,它会 运行 更长的时间。我需要的是#1 执行命令并#2 获取该命令的连续输出的方法。
输出示例:
一些文字...(然后等待大约半分钟)
一些其他文字...(等待一段时间)
更多文字...
你明白了,输出大约每 30 秒出现一次。我需要捕获所有输出并对它们进行处理。有办法吗?
我知道我可以使用 os.system('command') 执行命令,但我正在努力寻找读取输出的方法!
this answer 中给出了一个简单的解决方案。 在 python 3 中它会是这样的:
#!/usr/bin/env python3
import subprocess
proc = subprocess.Popen('./your_process', stdout=subprocess.PIPE)
while True:
line = proc.stdout.readline()
if not line:
break
else:
# Do whathever you need to do with the last line written on
# stdout by your_process
print("doing some stuff with...", line)
print("done for this line!")
当然,您仍然需要考虑生产者进程如何缓冲 stdout
,即子进程是否类似于
#include <stdio.h>
#include <unistd.h>
int main()
{
for (int i = 1; i < 10000000; i++) {
printf("ping");
sleep(1);
}
}
消费者脚本只会一起读取很多“ping”(这可以通过循环中的 fflush(stdout)
来解决。)
可以在 this answer 中找到更复杂的解决方案。