标签: stdio

从PHP写入stdin?

在linux中我想从PHP运行一个gnome zenity进度条窗口.zenity如何工作是这样的:

linux-shell$ zenity --display 0:1 --progress --text='Backing up' --percentage=0
10
50
100
Run Code Online (Sandbox Code Playgroud)

因此第一个命令以0%打开zenity进度条.Zenity然后将标准输入数字作为进度条百分比(因此当您输入这些数字时,它将从10%变为50%到100%).

我无法弄清楚如何让PHP输入这些数字,我试过:

exec($cmd);
echo 10;
echo 50;
Run Code Online (Sandbox Code Playgroud)

和:

$handle = popen( $cmd, 'w' );
fwrite( $handle, 10 );
Run Code Online (Sandbox Code Playgroud)

和:

$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w")  // stdout is a pipe that the child will write to
);

$h = proc_open($cmd, $descriptorspec, $pipes);

fwrite($pipes[1], 10);
Run Code Online (Sandbox Code Playgroud)

但是没有一个更新进度条.在什么方面我可以模仿stdin对linux shell的影响来获得zenity来更新它的进度条?

php linux gnome stdio zenity

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

Elixir/Erlang:如何找到高CPU使用率的来源?

我的Elixir应用程序使用了大约50%的CPU,但实际应该只使用<1%.我试图找出导致高CPU使用率的原因,我遇到了一些麻烦.

在远程控制台中,我试过了

  1. 列出所有进程 Process.list
  2. 查看过程信息 Process.info
  3. 通过减少计数对流程进行排序
  4. 按消息队列长度对进程进行排序

消息队列都接近于0,但某些进程的减少计数非常高.具有高减少计数的过程被命名

  1. :file_server_2
  2. ReactPhoenix.ReactIo.Pool
  3. :code_server

(1)和(3)都出现在我的其他应用程序中,所以我觉得它必须是(2).这就是我被困住的地方.我怎样才能进一步弄清楚为什么(2)使用如此多的CPU?

我知道ReactPhoenix使用react-stdio.看看top,react-sdtio不使用任何资源,但光束确实如此.

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        87 53.2  1.2 2822012 99212 ?       Sl   Nov20 580:03 /app/erts-9.1/bin/beam.smp -Bd -- -root /app -progname app/releases/0.0.1/hello.sh -- -home /root -- -noshell -noshell -noinput -boot /app/
root     13873  0.0  0.0   4460   792 ?        Rs   13:54   0:00 /bin/sh -c deps/react_phoenix/node_modules/.bin/react-stdio
Run Code Online (Sandbox Code Playgroud)

我在这个StackOverflow帖子中看到stdin会导致资源问题,但我不确定这是否适用于此.无论如何,任何帮助将不胜感激!

erlang stdio elixir cpu-usage reactjs

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

这个小的printf循环似乎无处发出一个额外的字节,为什么呢?

当我使用Windows命令行(即test.exe > test.txt)运行该自包含程序时,由于我无法理解的原因,它会发出一个额外的字节。

#include <stdio.h>

int main() {
    int N = 50;
    for (int i = 0; i < N; ++i)
        printf("%c%c%c", (int)(i / (float)N * 255), 0, 255);
}
Run Code Online (Sandbox Code Playgroud)

人们可能希望test.txt拥有150个字节,但是却有151个字节。用十六进制编辑器查看它,您可以看到:

0000 ff05 00ff 0d0a 00ff 0f00 ff14 00ff     
1900 ff1e 00ff 2300 ff28 00ff 2d00 ff33
00ff 3800 ff3d 00ff 4200 ff47 00ff 4c00
ff51 00ff 5600 ff5b 00ff 6000 ff66 00ff
6b00 ff70 00ff 7500 ff7a 00ff 7f00 ff84
00ff 8900 ff8e 00ff 9300 ff99 00ff …
Run Code Online (Sandbox Code Playgroud)

c printf stdio

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

python 2.7/exec /有什么问题?

我有这个代码在Python 2.5中运行良好,但在2.7中没有:

import sys
import traceback
try:
    from io import StringIO
except:
    from StringIO import StringIO

def CaptureExec(stmt):
    oldio = (sys.stdin, sys.stdout, sys.stderr)
    sio = StringIO()
    sys.stdout = sys.stderr = sio
    try:
        exec(stmt, globals(), globals())
        out = sio.getvalue()
    except Exception, e:
        out = str(e) + "\n" + traceback.format_exc()
    sys.stdin, sys.stdout, sys.stderr = oldio
    return out

print "%s" % CaptureExec("""
import random
print "hello world"
""")
Run Code Online (Sandbox Code Playgroud)

我得到:

string argument expected, got 'str'
Traceback (most recent call last):
  File "D:\3.py", line 13, …

python redirect exec stdio stringio

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

是否可以在单个C程序中的多个终端窗口上输出?

基本上我想做的是为一个程序提供两个输出终端窗口.一个是显示程序正在执行的操作的日志,第二个将显示类似值的表.这些终端的所有输出都将由程序本身生成.用stdio在C中可以做到这一点吗?

我意识到这可能更适合GUI或ncurses,但我仍然很好奇是否可以这样做.

编辑:也许应该提一下我在linux上做这个(特别是xubuntu).

c terminal stdio

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

printf不打印到屏幕

如果我尝试在Windows 7上的Cygwin下运行以下简单代码,

#include <stdio.h>
int main() {
int i1, i2, sums;

printf( "Enter first integer\n" );
scanf( "%d", &i1 );

printf( "Enter second integer\n" );
scanf( "%d", &i2 );

sums = i1 + i2;
printf( "Sum is %d\n", sums );

return 0;
}
Run Code Online (Sandbox Code Playgroud)

它编译(通过gcc)没有问题,但是当我尝试执行它时,第一个语句("输入第一个整​​数")没有打印到终端,我必须输入两个连续的数字(例如3和4)在我得到之前

3
4
Enter first integer
Enter second integer
Sum is 7
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释这里发生了什么.这在MinGW下非常有效.

c cygwin stdio

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

彩色端子输出不会复位

在编写更大的程序时,我偶然发现了彩色文本输出的小问题.这是一个更简单的程序,可以重现这个问题.

#include <stdio.h>

#define COL_RESET "\033[0m"
#define COL_BG_RED  "\x1B[41m"

char *str = "the quick brown fox jumped over the lazy dog";

int main(int argc, char *argv[])
{
    int i = 10;
    while (i) {
        puts(COL_BG_RED);
        puts(str);
        puts(COL_RESET);
        puts(str);
        i--;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在这是我运行程序时得到的:

第一次 - 预期的结果

第一次

第二次

在此输入图像描述

如您所知,即使重置红色后,程序也会决定随机打印行.在新终端中启动时,它始终打印预期结果.除非我跑clear,否则无法保证输出不会像第二张图片那样受损.

在我正在使用的图片中xterm,虽然其他终端做同样的事情.

我该怎么做才能防止这种情况发生?

c linux terminal stdio

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

如何使用 boost.process 重定向标准输入和标准输出

我正在尝试重定向子进程的标准输入和标准输出。想用来自缓冲区的二进制数据填充进程的标准输入并读取它,(但现在我只需要知道有多少写入标准输出)

namespace  bp = boost::process;
bp::opstream in;
bp::ipstream out;

bp::child c(Cmd.c_str(), bp::std_out > out, bp::std_in < in);

in.write((char*)buffer,bufferSize);
integer_type totalRead = 0;
char a[10240];
while (out.read(a,10240))  totalRead += out.gcount();
c.terminate();
Run Code Online (Sandbox Code Playgroud)

write 看起来是成功的,但程序卡在了 read-while 循环中,进程(子进程和父进程)在此期间保持空闲

c++ windows boost stdio boost-process

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

fgets(), signals (EINTR) and input data integrity

fgets() was intended for reading some string until EOF or \n occurred. It is very handy for reading text config files, for example, but there are some problems.

First, it may return EINTR in case of signal delivery, so it should be wrapped with loop checking for that.

Second problem is much worse: at least in glibc, it will return EINTR and loss all already read data in case it delivered in middle. This is very unlikely to happen, but …

c posix signals stdio libc

5
推荐指数
2
解决办法
135
查看次数

stdio 错误检测:ferror 与 fclose

在标准 C 中,您如何可靠地检查写入标准 I/O 流的所有输出是否已成功保存到磁盘?

C 标准规定fclose成功时将返回 0,如果“检测到任何错误” ,则返回 EOF。

但这是否意味着“在fclose通话过程中检测到任何错误”?或者这是否意味着“自上次调用clearerr”以来检测到任何错误?

换句话说,程序检查 的返回值就足够了fclose,还是还需要检查ferror?是否有任何实现,如果ferror返回非零,则后续调用fclose可能返回 0?

这同样适用于fflush:如果fflush返回 0,后续调用也ferror将返回 0,如果fflush返回 EOF,后续调用ferror将返回非零值是否总是这样?是否有任何实现不是这种情况?

(当然,我不考虑停电、小鬼等。是的,需要保证耐用性的程序应该使用fsync,但这超出了标准 C 的范围。)

c stdio language-lawyer

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