相关疑难解决方法(0)

如何刷新打印功能的输出?

如何强制Python的打印功能输出到屏幕?

这不是禁用输出缓冲的重复- 链接的问题是尝试无缓冲输出,而这是更一般的.这个问题的最佳答案太强大或涉及到这个问题(他们不是很好的答案),这个问题可以在谷歌上找到一个相对新手.

python printing flush python-3.x

1111
推荐指数
13
解决办法
72万
查看次数

在进程运行时不断打印Subprocess输出

要从我的Python脚本启动程序,我使用以下方法:

def execute(command):
    process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    output = process.communicate()[0]
    exitCode = process.returncode

    if (exitCode == 0):
        return output
    else:
        raise ProcessException(command, exitCode, output)
Run Code Online (Sandbox Code Playgroud)

因此,当我启动一个类似的过程时Process.execute("mvn clean install"),我的程序会一直等到过程结束,然后我才能获得程序的完整输出.如果我正在运行需要一段时间才能完成的过程,这很烦人.

我可以让我的程序逐行写入进程输出,通过在循环结束之前轮询进程输出或其他内容吗?

**[编辑]抱歉,在发布此问题之前我没有很好地搜索.线程实际上是关键.在这里找到一个示例,说明如何执行此操作:** 来自线程的Python Subprocess.Popen

python subprocess

175
推荐指数
9
解决办法
16万
查看次数

从子进程实时捕获stdout

我想subprocess.Popen()在Windows中使用rsync.exe,并在Python中打印stdout.

我的代码有效,但在文件传输完成之前它没有抓住进度!我想实时打印每个文件的进度.

现在使用Python 3.1,因为我听说它应该更好地处理IO.

import subprocess, time, os, sys

cmd = "rsync.exe -vaz -P source/ dest/"
p, line = True, 'start'


p = subprocess.Popen(cmd,
                     shell=True,
                     bufsize=64,
                     stdin=subprocess.PIPE,
                     stderr=subprocess.PIPE,
                     stdout=subprocess.PIPE)

for line in p.stdout:
    print(">>> " + str(line.rstrip()))
    p.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

python subprocess stdout

74
推荐指数
9
解决办法
10万
查看次数

使用Python中的子进程从进程中无缓冲读取

我试图从一个产生长而耗时的输出的过程中读取.不过,我想抓住它的输出为当它被生产.但是使用类似下面的东西似乎是在缓冲命令的输出,所以我最终得到了所有输出行:

p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, bufsize=0)
    for line in p.stdout:
        print line
Run Code Online (Sandbox Code Playgroud)

我在MacOS 10.5上尝试这个

python subprocess

21
推荐指数
2
解决办法
7713
查看次数

subprocess.Popen.stdout - 实时读取标准输出(再次)

同样,同样的问题.
原因是 - 阅读以下内容后仍然无法使其正常工作:

我的情况是我有一个用C编写的控制台应用程序,让我们在循环中采用这个代码:

tmp = 0.0;   
printf("\ninput>>"); 
scanf_s("%f",&tmp); 
printf ("\ninput was: %f",tmp); 
Run Code Online (Sandbox Code Playgroud)

它不断读取一些输入并写入一些输出.

我与它交互的python代码如下:

p=subprocess.Popen([path],stdout=subprocess.PIPE,stdin=subprocess.PIPE)
p.stdin.write('12345\n')
for line in p.stdout: 
    print(">>> " + str(line.rstrip())) 
    p.stdout.flush() 
Run Code Online (Sandbox Code Playgroud)

到目前为止,每当我读取表单时,p.stdout它总是等待,直到进程终止然后输出一个空字符串.我尝试了很多东西 - 但结果仍然相同.

我尝试过Python 2.6和3.1,但版本没关系 - 我只需要让它在某个地方工作.

python subprocess stdout popen

12
推荐指数
1
解决办法
1万
查看次数

Python子进程模块不会在segfault上返回stdout

我正在从Python运行C可执行文件,这个可执行文件有时会出现段错误.当它发生段错误时,子进程模块不会在stdout或stderr中返回任何内容.

示例代码:

import subprocess

proc = subprocess.Popen(['./a.out'], stdin=subprocess.PIPE,
        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
print 'out: "%s"' % out
print 'err: "%s"' % err
print proc.returncode
Run Code Online (Sandbox Code Playgroud)

来源a.out是:

int main() {
    printf("hello world\n");
    int x = 1 / 0;
}
Run Code Online (Sandbox Code Playgroud)

输出./a.out是:

hello world
Floating point exception
Run Code Online (Sandbox Code Playgroud)

Python代码的输出是(在Linux中,python 2.7):

out: ""
err: ""
-8
Run Code Online (Sandbox Code Playgroud)

有没有办法获得可执行文件的输出,即使它崩溃了?

将返回码转换为字符串消息的通用方法也很不错.

python subprocess segmentation-fault

9
推荐指数
1
解决办法
1770
查看次数

在Python中实时拦截来自另一个进程的stdout

我想运行一个系统进程,拦截输出,并在Python脚本中逐行实时修改它.

我最好的尝试,等待打印前完成的过程,是:

#!/usr/bin/env python
import subprocess

cmd = "waitsome.py"
proc = subprocess.Popen(cmd, shell=True, bufsize=256, stdout=subprocess.PIPE)
for line in proc.stdout:
    print ">>> " + line.rstrip()
Run Code Online (Sandbox Code Playgroud)

脚本waitsome.py只需每半秒打印一行:

#!/usr/bin/env python
import time
from sys import stdout

print "Starting"
for i in range(0,20):
    time.sleep(0.5)
    print "Hello, iteration", i
    stdout.flush()
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的解决方案subprocess允许实时迭代输出?我必须使用线程吗?

曾几何时,我用Perl编写脚本,这是小菜一碟:

open(CMD, "waitsome.py |");
while (<CMD>) {
    print ">>> $_";
}
close(CMD);
Run Code Online (Sandbox Code Playgroud)

python perl process

5
推荐指数
1
解决办法
6495
查看次数