Articles of stdout

使用PHP从C应用程序的STDOUT中读取数据

我想要使​​用PHP中的Web界面分别读取和编写C应用程序的STDOUT和STDIN。 为此,我有一个testingc应用程序“hello.c”,在某些睡眠之后输出string,使用PHP我执行该C应用程序。 我在PHP中使用streamselectfunction,并检测该C应用程序的stdout是否有变化。 我读了应用程序的输出,但在PHP上,即使C应用程序输出完成,读取discriptor cotinuosly状态也改变了。 我的代码为C应用程序,PHP和浏览器输出如下; 你好ç #include<stdio.h> void main(void) { int i = 0; for(i = 0; i < 5; i++) { printf("hello world\n"); sleep(1); } } PHP <?php execute_prog('/var/www/html/test/./hello3'); function execute_prog($exe) { set_time_limit(1800); $exe_command = escapeshellcmd($exe); $descriptorspec = array( 0 => array("pipe", "r"), // stdin -> for execution 1 => array("pipe", "w"), // […]

CasperJs不能完全从PHP执行

样本CasperJstesting: casper.test.begin('Hello, Test!', 1, function(test) { test.assert(true); test.done(); }); Linux命令执行的结果: # casperjs test /bin/casper-test.js Test file: /bin/casper-test.js # Hello, Test! PASS Subject is strictly true PASS Hello, Test! (1 test) PASS 1 test executed in 0.026s, 1 passed, 0 failed, 0 dubious, 0 skipped. PHP的结果: <?php echo exec('casperjs test /path/to/casper-test.js'); ?> [37;42;1mPASS 1 test executed […]

bashredirectstdout和stderr来通过ssh分离命令

我正在使用BASH 4.我试图find一种方法来合法地预输出,以指示它的输出types。 我可以用这样的东西做这个… ls -l /tmp/abcdefgh 2> >(sed 's/^/stderr: /') 1> >(sed 's/^/stdout: /') stderr: ls: cannot access /tmp/abcdefgh: No such file or directory ls -l /tmp/ 2> >(sed 's/^/stderr: /') 1> >(sed 's/^/stdout: /') stdout: drwxr-xr-x 3 root root 4096 2010-10-15 09:08 fsck stdout: drwxr-xr-x 2 root root 4096 2010-09-10 06:01 kernel stdout: drwxr-xr-x […]

bash:当stdout不存在时该怎么做

在一个非常简化的情况下,我有一个如下所示的脚本: mv test _test sleep 10 echo $1 mv _test test 如果我执行它: ssh localhost "test.sh foo" 只要脚本正在运行,testing文件的名称中就会有一个下划线,当脚本完成时,它将发回foo 。 脚本应该保持运行,即使你通过按ctrl+c终止ssh命令,或者如果你失去了服务器的连接,但它不会(该文件不会重新命名为“test”)。 所以,我尝试了以下几点: nohup ssh localhost "test.sh foo" 它使得ssh免受ctrl+c但与服务器的连接仍然很麻烦。 经过一些debugging,事实certificate,脚本将实际到达结束,如果没有ECHO的话。 而当你考虑这个问题的时候,这是有道理的 – 当连接断开时,没有更多的stdout (ssh套接字)可以回应,所以它会自动失败。 我可以,当然,回声到一个文件,然后得到的文件,但我更喜欢更聪明的东西,沿着test tty && echo $1 (但tty像这样调用总是返回false )。 任何build议,非常感谢。

使用GDB将运行的进程STDOUT / STDERRredirect到SSH STDOUT

我有一个在embedded式系统上运行的进程(linux)。 它的STDOUT / STDERR是串口上的控制台。 我想将其输出(标准和错误)redirect到SSH会话的输出。 我读过你可以用GDB做类似的操作,但是我不知道如何redirect到SSH会话的STDOUT / STDERR而不是文件。 由于磁盘资源不足,我无法对文件执行此操作。 我也看到了一些使用命名pipe道的例子,但是我没有mkfifo命令可用。 我有GDB。 另外,假设这是可能的,当我closuresSSH会话时,进程是否会终止? 如果是这样,我可以重新导向回来吗? 谢谢。

freopen不写入指定的文件

我正在尝试使用文件redirectstdout和stderr的输出。 我正在使用freopen,它创build了正确的目录中的文件,但文件是空白的。 当我注释掉redirectstdout和stderr的代码时,输​​出显示在控制台上。 这里是代码: freopen(stderrStr.c_str(), "a+", stderr); //where stderrStr and stdoutStr are the path/file name freopen(stdoutStr.c_str(), "a+", stdout); fclose(stdout); fclose(stderr); 我已经放置了一个printf(“我工作”)在主要和没有抑制剂它输出,但不会写入文件。

与subprocess标准输出/标准input进行通信

我正在尝试与一个进程进行通信(它本身写入到标准input和标准输出与用户在一个terminal进行交互),并读取它的标准input,并写入它的标准输出在C. 因此,我尝试以编程方式replaceshell用户。 一个美好的例子:想象一下,我想用C中的VIM出于某种原因。 然后我还需要编写命令(stdout)并从编辑器(stdin)读取内容。 起初,我认为这可能是一个微不足道的任务,但似乎没有标准的方法。 int system(const char *command); 只是执行一个命令,并将命令stdin / stdout设置为调用进程的一个。 因为这无处可去,所以我查看了FILE *popen(const char *command, const char *type); 但手册页指出: 由于pipe道的定义是单向的,所以types参数可以只指定读或写,而不是两者; 所得到的stream是相应的只读或只写。 其含义是: popen()的返回值在所有方面都是标准的I / Ostream,除了它必须用pclose()而不是fclose(3)来closures。 写入这样的stream写入命令的标准input; 该命令的标准输出 与调用popen()的进程 的标准输出 相同 ,除非这个命令本身被改变了。 相反, 从“popened”stream中读取命令的标准输出 , 命令的标准input与调用popen()的过程相同 。 因此,使用popen()并不是完全不可能的,但是在我看来,这是非常不雅观的,因为我将不得不parsing调用进程(称为popen()的代码)的stdout,以便parsing从被指挥的命令(当使用popen型'w'时)。 相反,当用'r'types调用popen时,我需要写入调用的进程stdin,以便将数据写入到被调用的命令中。 在这种情况下,我不清楚这两个进程是否在标准input接收相同的数据… 我只需要控制程序的stdin和stdout。 我的意思是不能有这样的function: stdin_of_process, stdout_of_process = real_popen("/path/to/bin", "rw") // write some data to the process stdin […]

C将标准输出redirect到几个地方

将输出redirect到另一个目的地是相当容易的。 我可以轻松实现: freopen ("/def/tty0", "w", stdout); printf ("Redirected"); fclose (stdout); 但是,我怎么能redirect到两个或更多的文件? 我需要类似于“tee”所提供的function。 有没有什么众所周知的方法?

如何仅在命令完成时输出

我使用&运行多个命令: curl "url1" –output /dev/null 2>> out & curl "url1" –output /dev/null 2>> out & wait 这不能很好地工作,因为输出行是交错的。 我希望每个curl都能保持它的输出,直到完成。 怎么做? 我知道我可以使用临时文件,concat在一起,然后删除。 有更好的方法吗? curl "url1" –output /dev/null 2>> out1 & curl "url1" –output /dev/null 2>> out2 & wait

Linux的所有输出到文件

有什么办法告诉Linux系统把所有的输出(stdout,stderr)放到一个文件中? 无需使用redirect,pipe道或修改如何调用脚本。 只要告诉Linux使用一个文件输出。 例如:脚本test1.sh: #!/bin/bash echo "Testing 123 " 如果我运行它像“./test1.sh”(与redirect或pipe道),我想看到一个文件(/ tmp / linux_output)中的“testing123” 问题:在系统中,一个二进制文件调用了一个脚本,这个脚本调用了许多其他的脚本。 这是不可能的,所以如果我可以修改Linux把“输出”到一个文件我可以检查日志。