标签: unbuffered-output

检测子进程何时等待输入

我正在编写一个Python程序,用于在Linux服务器上运行用户上传的任意(因此,在最坏的情况下,不安全,错误和崩溃)代码.抛开安全问题,我的目标是确定代码(可能是任何语言,编译或解释)是否写入了正确的内容stdout,stderr以及给定输入的其他文件是否输入到程序中stdin.在此之后,我需要向用户显示结果.

目前的解决方案

目前,我的解决办法是使用产卵子进程subprocess.Popen(...)与文件句柄stdout,stderrstdin.后面的文件stdin句柄包含了操作过程中的程序读取输入,并且该程序已终止后,将stdoutstderr文件的读取,并检查正确性.

问题

这种方法非常完美,但是当我显示结果时,我无法组合给定的输入和输出,因此输入将出现在与从终端运行程序时相同的位置.即类似的程序

print "Hello."
name = raw_input("Type your name: ")
print "Nice to meet you, %s!" % (name)
Run Code Online (Sandbox Code Playgroud)

stdout运行后,包含该程序的文件的内容将是:

Hello.
Type your name: 
Nice to meet you, Anonymous!
Run Code Online (Sandbox Code Playgroud)

鉴于内容包含该文件stdinAnonymous<LF>.所以,简而言之,对于给定的示例代码(以及,等效地,对于任何其他代码),我想实现如下结果:

Hello.
Type your name: Anonymous
Nice to meet you, Anonymous!
Run Code Online (Sandbox Code Playgroud)

因此,问题是检测程序何时等待输入.

尝试过的方法

我尝试了以下方法来解决问题:

Popen.communicate(...)

这允许父进程沿管道单独发送数据,但只能调用一次,因此不适用于具有多个输出和输入的程序 - 正如可以从文档中推断出来的那样.

直接从Popen.stdout …

python linux subprocess pty unbuffered-output

23
推荐指数
1
解决办法
3440
查看次数

Oracle PL/SQL - 即时输出/控制台打印的提示

我有许多pl/sql程序,可能需要几分钟才能运行.在开发它们时,我添加了一些打印语句来帮助调试,并提供一些反馈和进度指标.最初,我在小型测试装置上运行这些,输出几乎是瞬间完成的.既然我正在测试需要花费几分钟才能运行的更大的测试集,我发现打印到控制台不再合适,因为在程序结束之前不会打印任何内容.我习惯于在不缓冲输出并立即打印的环境中工作,并且添加简单的打印语句以进行简单的调试和诊断很常见.

是否可以在pl/sql中立即打印输出(不缓冲)?如果没有,人们建议采用哪些替代方案来获得类似的结果?

oracle debugging plsql console-output unbuffered-output

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

bash:强制exec'd进程有无缓冲的stdout

我有一个像这样的脚本:

#!/bin/bash
exec /usr/bin/some_binary > /tmp/my.log 2>&1
Run Code Online (Sandbox Code Playgroud)

问题是它将some_binary所有日志记录发送到stdout,并且缓冲使得它只能看到几行的块输出.当一些事情陷入困境时,这很烦人,我需要看看最后一行说的是什么.

有没有办法让stdout在我执行会影响some_binary的exec之前没有缓冲,所以它有更多有用的日志记录?

(包装器脚本只在exec之前设置一些环境变量,因此perl或python中的解决方案也是可行的.)

bash logging exec unbuffered-output

20
推荐指数
3
解决办法
2万
查看次数

分段故障问题

我观察到有时在C程序中,如果我们printf在分段错误之前的任何地方都有代码,它就不会打印.为什么会这样?

c io segmentation-fault unbuffered-output

10
推荐指数
3
解决办法
3486
查看次数

什么是Windows上的unbuffer程序?

嗨,根据这篇文章,unbuffer通过伪终端(pty)连接到命令,这使得系统将其视为交互式进程,因此不使用任何stdout缓冲.

我想在Windows上使用此功能.我可以知道unbufferWindows 上程序的等价物吗?谢谢.

windows expect pty unbuffered-output

10
推荐指数
2
解决办法
1914
查看次数

Windows 中 Python 的缓冲输出与非缓冲输出

我使用 NppExec/Notepad++ 运行 Python 脚本,并在运行时连续刷新输出缓冲区,以使用print语句更新控制台窗口(默认缓冲输出仅在脚本执行完成后显示所有打印语句)。

链接显示您所需要做的就是使用该命令python -u来获取无缓冲的输出。无论使用什么编辑器,对所有Python 脚本使用此执行模式是否有缺点?我不清楚缓冲输出和无缓冲输出之间的区别。

编辑:我包含了这个小的 Python 计时器脚本作为示例:

#!usr/bin/env python
import time
import threading
import sys

class Timer(threading.Thread):
    def __init__(self, seconds):
        self.runTime = seconds
        threading.Thread.__init__(self)
    def run(self):
        counter = self.runTime
        for sec in range(self.runTime):
            print counter
            time.sleep(1.0)
            counter -= 1
        print "Done."

if __name__ == '__main__':
    t = Timer(10)
    t.start()
Run Code Online (Sandbox Code Playgroud)

在这种情况下,缓冲和无缓冲输出在效率方面有多大差异?

python notepad++ unbuffered-output nppexec

3
推荐指数
2
解决办法
4630
查看次数

C - write()系统调用打印乱码而不是pid_t

以下代码:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    pid_t mypid = getpid();
    write(1, &mypid, sizeof(pid_t));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印乱码而不是实际的pid.为什么?

c unbuffered-output

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