相关疑难解决方法(0)

如何在Python 2.7中隐藏子进程的输出

我在Ubuntu上使用eSpeak并且有一个Python 2.7脚本可以打印并说出一条消息:

import subprocess
text = 'Hello World.'
print text
subprocess.call(['espeak', text])
Run Code Online (Sandbox Code Playgroud)

eSpeak会产生所需的声音,但是外壳会出现一些错误(ALSA lib ...,没有套接字连接),因此我无法轻易读取之前打印的内容.退出代码为0.

不幸的是,没有任何记录的选项可以关闭它的详细程度,所以我正在寻找一种只能在视觉上使其静音并保持打开的外壳清洁以进行进一步交互的方法.

我怎样才能做到这一点?

python subprocess espeak python-2.7

262
推荐指数
4
解决办法
20万
查看次数

擦除当前打印的控制台线

如何在C中删除当前打印的控制台线?我正在研究Linux系统.例如 -

printf("hello");
printf("bye");
Run Code Online (Sandbox Code Playgroud)

我想在同一行打印再见代替你好.

c linux console erase

61
推荐指数
3
解决办法
13万
查看次数

终端或控制台中的就地进度输出

当您运行时git clone,它会更新进度.例如,收到的对象的百分比会发生变化.

user@athena:~/cloj/src$ git clone git://git.boinkor.net/slime.git
Initialized empty Git repository in /home/user/cloj/src/slime/.git/
remote: Counting objects: 15936, done.
remote: Compressing objects: 100% (5500/5500), done.
Receiving objects:  28% (4547/15936), 3.16 MiB | 165 KiB/s
Run Code Online (Sandbox Code Playgroud)

这是如何完成的?它是否使用ncurses或更简单的东西,比如退格字符和常规字符输出的某种组合?

我对如何通过Ruby实现这种控制台输出特别感兴趣.

编辑

我原来的问题得到了回答.但这是一个附录.例如,当您使用MPlayer时,它不仅会更新一行以显示当前进度,还会更新前一行(例如,当您按下暂停时).

 =====  PAUSE  =====
A:  79.9 (01:19.9) of 4718.0 ( 1:18:38.0)  0.3% 
Run Code Online (Sandbox Code Playgroud)

您如何在适当的位置更新两行输出?

ruby unix terminal ncurses

32
推荐指数
2
解决办法
8947
查看次数

Python C程序子进程挂起"for line in iter"

好的,我试图从python脚本运行一个C程序.目前我正在使用测试C程序:

#include <stdio.h>

int main() {
while (1) {
    printf("2000\n");
    sleep(1);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

模拟我将要使用的程序,它不断地从传感器获取读数.然后我试图"2000"从C程序读取输出(在这种情况下)与python中的子进程:

#!usr/bin/python
import subprocess

process = subprocess.Popen("./main", stdout=subprocess.PIPE)
while True:
    for line in iter(process.stdout.readline, ''):
            print line,
Run Code Online (Sandbox Code Playgroud)

但这不起作用.从使用print语句开始运行该.Popen行然后等待for line in iter(process.stdout.readline, ''):,直到我按下Ctrl-C.

为什么是这样?这正是我见过的大多数示例都是他们的代码,但它没有读取文件.

编辑:

有没有办法让它只在有东西被阅读时才能运行?

c python subprocess hang

17
推荐指数
2
解决办法
5446
查看次数

使用python获取pv的输出

有没有办法在 python 中使用 pv 程序来获取操作的进度?

到目前为止我有以下内容:

    p0 = sp.Popen(["pv", "-f", args.filepath],
                  bufsize=0,
                  stdout=sp.PIPE,
                  stderr=sp.PIPE)
    p1 = sp.Popen(["awk", "{print $1, $2, $1, $3, $4 }",  "{}".format(args.filepath)],
                   stdout=sp.PIPE,
                   stdin=p0.stdout)
Run Code Online (Sandbox Code Playgroud)

但我无法从 获得连续输出p0。我试过:

    for line in p0.stderr:
        print("line:", line)
Run Code Online (Sandbox Code Playgroud)

但这会等待该过程完成,然后仅打印来自的最后一个进度报告pv。有谁知道我怎样才能让它打印不断更新的状态?

python subprocess

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

标签 统计

python ×3

subprocess ×3

c ×2

console ×1

erase ×1

espeak ×1

hang ×1

linux ×1

ncurses ×1

python-2.7 ×1

ruby ×1

terminal ×1

unix ×1