我想结合

fread()和部分结果的串联($result.=fread())

您想等到tcl应用程序在一定时间内(假定这意味着最后一个命令结束)不向其stdout写入内容,然后将下一个命令/行发送到其stdin?

编辑:

似乎

就像你可以一次将所有的命令发送到tcl shell,并且一个接一个地对它们进行处理,也就是说,当完成前一个命令时,shell会读取下一个输入行/命令。我用脚本测试过这个。

incr a 1

after 1000

puts [concat [clock seconds] $a]

$app = 'c:/programme/tcl/bin/tclsh85.exe';

$descriptorspec = array(

0 => array("pipe","r"),

1 => array("pipe","w"),

2 => array("file","C:/god.txt","w")

) ;

$process = proc_open($app, $descriptorspec, $pipes);

if (is_resource($process)) {

fwrite($pipes[0], "set a 1\n");

for($i=0;$i<4;$i++) {

fwrite($pipes[0], "source c:/helloworld.tcl\n");

}

// when all scripts are done the shell shall exit

fwrite($pipes[0], "exit\n");

fclose($pipes[0]);

do {

$read=array($pipes[1]); $write=array(); $except=array($pipes[1]);

// wait up to 1 second for new output of the tcl process

$ready = stream_select($read, $write, $except, 1, 0);

if ( $ready && $read /* is not empty */) {

// get the partial output

$r = fread($pipes[1], 2048);

echo $r;

}

// is the process still running?

$status = proc_get_status($process);

} while($status['running']);

fclose($pipes[1]);

proc_close($process);

}

?>

您可能需要添加更多的错误处理。例如,如果stream_select()返回x次并超时,则可能发生了错误。

编辑2:

让shell打印每个脚本之后可以扫描的内容。

// something that's not in the "normal" output of the scripts

$id = 'done'. time();

$app = 'c:/programme/tcl/bin/tclsh85.exe';

$descriptorspec = array(

0 => array("pipe","r"),

1 => array("pipe","w"),

2 => array("file","C:/god.txt","w")

) ;

$process = proc_open($app, $descriptorspec, $pipes);

if (is_resource($process)) {

fwrite($pipes[0], "set a 1\n");

for($i=0;$i<4;$i++) {

$output = '';

$continue = true;

$cTimeout = 0;

echo 'loop ', $i, "\n";

fwrite($pipes[0], "source c:/helloworld.tcl\n");

fwrite($pipes[0], "puts $id\n");

echo "waiting for idle\n";

do {

$read=array($pipes[1]);

$write=array();

$except=array($pipes[1]);

$ready = stream_select($read, $write, $except, 1, 0);

if ( $ready && $read ) {

$output .= fread($pipes[1], 2048);

// if the delimiter id shows up in $output

if ( false!==strpos($output, $id) ) {

// the script is done

$continue = false;

}

}

} while($continue);

echo 'loop ', $i, " finished\n";

}

proc_close($process);

}

?>

php fread读行,如何使fread阻塞和读取直到结束?相关推荐

  1. linux下使用fread读socket套接字的注意点

    linux下使用fread读socket套接字的注意点 linux总所周知,一切皆文件.因此我们在读写文件时觉得fread,recv这些可以随便用.下面看看有哪些注意事项呢. 因为C库的文件处理函数较 ...

  2. php socket fread,linux下使用fread读socket套接字的注意点

    linux总所周知,一切皆文件.因此我们在读写文件时觉得fread,recv这些可以随便用.下面看看有哪些注意事项呢. 因为C库的文件处理函数较多,处理起来很灵活.所以在处理套接字时可以用fdopen ...

  3. 【问题】fread读到的数据是0

    现象:今天在使用fread读一块很大的buffer时,只有前面几个字节有内容,后面的数据都是0. 原因:fread,fwrite函数都是以二进制读写的,调用fopen时也需要以二进制的方式打开&quo ...

  4. 读行学区块链专栏 | 全球区块链资讯Top10

    区块链全球资讯早知道!联合W财经ChainW共同打造[读行学区块链专栏]! 据彭博社报道,一位知识产权律师表示,中国科技公司在政府推动知识产权保护措施的帮助下,可能会在开发区块链技术方面超越外国同行. ...

  5. 文件流中读行的正确使用(fgets、feof、ferror)

    char *fgets(char *buf, int bufsize, FILE *stream); 功能 fgets函数用来从stream所指文件中读入bufsize-1个字符放入buf为起始地址的 ...

  6. python读文件一次读特定行_Python3实现从文件中读取指定行的方法 python读取文本内每行指定内容...

    如何用python读取文本中指定行的内容在这个世界上说不出口的话太多了,你能不能陪小编去,你能不能留下来,你能不能帮帮小编,你对小编很重要,所以你可不可以不要走,到最后哽咽出口的却是,没关系,小编可以 ...

  7. pandas读取csv文件的前几行数据(nrows参数)、pandas读取csv文件的中间几行数据(skiprows=range(a,b))

    pandas读取csv文件的前几行数据(nrows参数).pandas读取csv文件的中间几行数据(skiprows=range(a,b)) 目录 pandas读取csv文件的前几行数据.pandas ...

  8. fread读结构体返回值是0无错误_嵌入式C编程之错误处理(附代码例子)!

    原标题:嵌入式C编程之错误处理(附代码例子)! 作者: clover-toeic 前言 本文主要总结嵌入式系统C语言编程中,主要的错误处理方式.文中涉及的代码运行环境如下: 一.错误概念 错误分类 从 ...

  9. 快读快写和fread,fwrite--zhengjun

    首先,先谈谈快读快写 这是我一开始的输入输出 cin>>a; cout<<a; 然后,因为在一次模拟赛中cincincin被卡掉了,于是,我就改用 scanf("%d ...

最新文章

  1. eclipse中 properties文件编码问题
  2. maven指定构建的编码格式
  3. 算法题题目集合一,欢迎评论留言
  4. 机器学习13大规模数据集
  5. 硬件基础 —— 二极管
  6. Android开发:5-3、Menu、Dialog、Fragment
  7. 团队工作-------step2
  8. JS实现图片翻书效果
  9. UWP 手绘视频创作工具技术分享系列
  10. windows mysql 升级
  11. android 新浪微博客户端的表情功能的实现,flutter教程pdf
  12. IOS:游戏存档修改,替换
  13. 链游成公链新宠,风口之下究竟哪家称王?
  14. 技术人员的价值是什么?技术的价值体现在赋能业务
  15. Verilog-黑金-扫盲文笔记
  16. 无人机灯光秀,用到了哪些关键技术?
  17. html怎么去除照片背景颜色,photoshop怎么去除图片背景色
  18. Android 仪表盘 图片 中心 旋转
  19. 一次大文件上传失败的排查
  20. 【最新】滤器完整性检测各国规定

热门文章

  1. 北京大学吴华君课题组多组学数据分析方向博士后和技术员招聘启示
  2. 蚂蚁森林合种计划(2020.12.19更新,7天有效)
  3. 作物驯化与人类的生活
  4. 【震惊】漱口水居然增加糖尿病,高血压发病率
  5. 可持续农业生态系统中的核心微生物组
  6. 合川专升本计算机怎么学升学率,2019年重庆市合川太和中学高考喜报
  7. python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation)
  8. pandas使用read_csv函数读取文件最后N行数据并保留表头、pandas使用read_csv函数读取网络url链接数据
  9. R语言rev函数对数据对象(向量、dataframe通过行或者列)反序实战
  10. R语言ggplot2可视化散点图、并以与y=0为界绘制基于散点包围的多边形(ploygon)、对于y=0坐标轴的上方和下方的多边形分别使用不同的颜色进行填充