关于“popen函数_php”的问题,小编就整理了【3】个相关介绍“popen函数_php”的解答:
linuxC程序中如何获取shell的脚本输出呢?你说的是Linux C程序获取shell脚本(命令)输出吧,这里简单介绍3种方式,分别是临时文件、匿名管道和popen函数,感兴趣的朋友可以尝试一下:
临时文件
这种方式较容易实现,基本思想是调用C语言标准库的system函数,运行shell命令或脚本,将输出结果重定向到一个临时文件中,然后读取临时文件,获取shell执行结果,测试代码如下,非常简单,输入参数分别为shell命令(脚本)和临时文件名,较终结果保存在临时文件中:
匿名管道
这种方式主要是管道,先pipe创建一个匿名管道,然后fork创建一个子进程,子进程运行shell命令或脚本,并将标准输出dup到匿名管道的写端,父进程再从匿名管道读端读取数据即可,测试代码如下,非常简单,子进程对应写端,父进程对应读端:
popen函数
这种方式较简单,C标准库专门提供了一个popen函数,可以非常简单的处理调用shell,基本思想创建一个管道,fork一个进程,然后执行shell,而shell的输出可以采用读取文件的方式获得,这种方式既避免了创建临时文件,又不受输出字符数的限制,推荐使用:
目前,就分享这3种Linux C程序获取shell脚本(命令)输出的方式吧,对于日常开发应用来说,完全够用了,只要你有一定的C语言基础,熟悉一下上面的代码,很快就能掌握的,网上也有相关教程和资料,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。
为了方便调试程序,php提供了什么函数?1.debug_zval_dump(),它与var_dump()的区别就是它新增了一个值refcount,即记录变量被引用的次数。同时它还可以打印几个变量。 如果你连引用计数器都不懂的话,请阅读:PHP垃圾回收机制引用计数器概念 2.debug_print_backtrace() debug_backtrace() 只是前者直接打印出来了而已。查看整个程序的调用栈,用来查看瞬间函数调用栈,方便查错。
python如何调用操作系统原语?在Python里面,直接调用系统命令,可以快速的完成任务。一般使用os或者subprocess模块,来执行系统命令。
os.system()
该函数返回命令执行结果的返回值,system()函数在执行过程中进行了以下三步操作:
1、fork一个子进程;
2、在子进程中调用exec函数去执行命令;
3、在父进程中调用wait(阻塞)去等待子进程结束。
返回0表示命令执行成功,其他表示失败。
注意:使用该函数经常会莫名其妙地出现错误,但是直接执行命令并没有问题,所以一般建议不要使用。
用法:os.system(“command”)
os.popen()这种调用方式是通过管道的方式来实现,函数返回是 file read 的对象,对其进行读取read、readlines等操作可以看到执行的输出。
注意:如果命令执行失败,就读取不到内容。
用法:os.popen(“command”)
subprocess.Popen()subprocess模块被推荐用来替换一些老的模块和函数,如:os.system、os.spawn*、os.popen*等
subprocess模块目的是fork一个新的进程并与之通信,较常用是定义类Popen,使用Popen可以创建进程,并与进程进行复杂的交互。其函数原型为:
subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)1args:这个参数必须是字符串或者是一个由字符串成员的列表。其中如果是一个字符串列表的话,那第一个成员为要运行的程序的路径以及程序名称;从第二个成员开始到较后一个成员为运行这个程序需要输入的参数。
executable:指定要运行的程序,这个一般很少用到,因为要指定运行的程序在args中已经指定了。stdin,stdout ,stderr:分别代表程序的标准输入、标准输出、标准错误处理。可以选择的值有PIPE,已经存在的打开的文件对象和NONE。若stdout是文件对象的话,要确保文件对象是处于打开状态。
shell:默认是False。shell参数根据要执行的命令情况来定,如果将参数shell设为True,executable将指定程序使用的shell。在windows平台下,默认的shell由COMSPEC环境变量来指定。
bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
cwd:用于设置子进程的当前目录
stdin, stdout, stderr:分别表示程序的标准输入、标准输出、标准错误输出,可以是 subprocess.PIPE 或 其他程序、文件。
env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
universal_newlines:不同系统的换行符不同,True 即使用 \n
preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用。
用法: child = subprocess.Popen([“cmd”,“arg1”…])
subprocess.Popen类的实例可调用的方法Popen.poll() 用于检查子进程(命令)是否已经执行结束,没结束返回None,结束后返回状态码。
Popen.wait(timeout=None)等待子进程结束,并返回状态码;如果在timeout指定的秒数之后进程还没有结束,将会抛出一个TimeoutExpired异常。
Popen.communicate(input=None, timeout=None)该方法可用来与进程进行交互,比如发送数据到stdin,从stdout和stderr读取数据,直到到达文件末尾。
Popen.send_signal(signal)发送指定的信号给这个子进程。
Popen.terminate()停止该子进程。
Popen.kill()杀死该子进程。
到此,以上就是小编对于“popen函数_php”的问题就介绍到这了,希望介绍关于“popen函数_php”的【3】点解答对大家有用。