用popen()函数打开进程上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加Linux的系统用户时,要调用su来
把当前用户换到root才行,而su命令必须要在命令行上输入root的密码。这种情况下,用上面提到的方法显然是不行的。popen ()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,
对这种句柄只能做单一 的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则
必须调用pclose()函数来关闭 它。
例子1:
复制代码 代码如下:<?php $fp=popen("/bin/ls -l", "r");
?> 示例2:<?php /* PHP中如何增加一个系统用户 下面是一段例程,增加一个名字为james的用户, root密码是 verygood。仅供参考 */ $sucommand = "su --login root --command"; $useradd = "useradd "; $rootpasswd = "verygood"; $user = "james"; $user_add = sprintf("%s "%s %s"",$sucommand,$useradd,$user); $fp = @popen($user_add,"w"); @fputs($fp,$rootpasswd); @pclose($fp); ?> PHP编程中,由于代码处理的数据量太大,单个进程处理需要很长的时间,所以需要用到并发进行处理。popen命令说明:打开一个指向进程的管道,该进程由派生指定的 command 命令执行而产生。使用popen结合SHELL命令也可以实现多进程并发编程。下面开始代码实现,文件a.php:<?phpfor ($i=0;$i<10;$i++){file_put_contents('./t.txt',$i,FILE_APPEND);sleep(1);}?>程序b.php:<?phpecho "start curl\n";//popen函数,参数1执行php命令(PHP的路径 需要执行的php命令文件或其他shell命令),参数2以只读方式执行命令$out = popen("/usr/local/bin/php ./a.php", "r");echo "test\n";pclose($out);echo "end curl\n";?>运行b.php:我们发现test立即被输出,而a.php仍然在执行中。10秒后,a.php执行完毕,整个程序执行结束。t.text文件中,已被写入内容。
详细解决方案
popen()函数打开进程
热度:17 发布时间:2023-12-09 11:47:57.0
相关解决方案
- 3.Linux进程间通信:匿名管道 popen()、pclose()、pipe()、close()、dup()、dup2()
- 转载--subprocess Popen()模块多线程通信与 Multiprocess queue pipe的区别
- subprocess.Popen
- C-open,fopen,fwrite,fread,fseek,fgets,popen,access笔记
- popen()函数打开进程
- flask ssti-subprocess.Popen(8-18)
- Python 技术篇-通过管道命令获取cmd执行的结果,获取os.system()、subprocess.Popen()执行命令返回的结果
- popen()
- system popen 输出重定向和显示输出的问题
- QThread及os.system 与 os.popen 运行命令行命令
- Subprocess.Popen() 使用问题解决方案
- python调用terminal命令(os.system/os.popen)及踩坑
- python调用Shell脚本:os.system(cmd)或os.popen(cmd)的区别
- popen / system的区别/为什么vfork 不能直接return 返回
- Python subprocess.Popen()简单实用
- python中eval和exec、os.system和os.popen