python和ruby脚本区别大吗?他们与php互相调用方便吗?另外在怎么在php里面获取shell输入的内容?

 我来答
楣长文0K
2011-08-04
知道答主
回答量:57
采纳率:0%
帮助的人:28.6万
展开全部
三个PHP调用系统命令函数的区别与联系
我们在执行linux系统的shell命令时,会用到PHP调用系统命令函数来实现。那么在这些函数中,主要包括了system(),exec(),passthru()这三个经常用于外部命令调用的函数。

  虽然这三个命令都能执行linux系统的shell命令,但是其实他们是有区别的:

  system() 输出并返回最后一行shell结果。

  exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。

  passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。

  相同点:都可以获得命令执行的状态码

  在PHP中调用外部命令,可以用如下三种方法来实现:

  用PHP提供的专门函数

  PHP提供共了3个专门的执行外部命令的PHP调用系统命令函数:system(),exec(),passthru()。

  system()

  原型:string system (string command [, int return_var])

  system()函数很其它语言中的差不多,这个PHP调用系统命令函数执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。

  例子:

  system("/usr/local/bin/webalizer/webalizer");

  exec()

  原型:string exec(string command [, string array [, int return_var]])

  exec()函数与system()这个PHP调用系统命令函数类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array 可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二个参数时,才可以用第三个参数,用来取得命令执行的状态码。

  例子:

  exec("/bin/ls -l");

  exec("/bin/ls -l", $res);

  exec("/bin/ls -l", $res, $rc);

  passthru()

  原型:void passthru (string command [, int return_var])

  passthru ()只调用命令,这个PHP调用系统命令函数不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus (Unix下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。

  例子:

  header("Content-type: image/gif");

  passthru("./ppmtogif hunte.ppm");

六种用ruby调用执行shell命令的方法
碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法:
1.Exec方法:
Kernel#exec方法通过调用指定的命令取代当前进程:
例子:
$ irb
>> exec 'echo "hello $HOSTNAME"'
hello nate.local
$
值得注意的是,exec方法用echo命令来取代了irb进程从而退出了irb。主要的缺点是,你无法从你的ruby脚本里知道这个命令是成功还是失败。

2.System方法。
Kernel#system方法操作命令同上, 但是它是运行一个子shell来避免覆盖当前进程。如果命令执行成功则返回true,否则返回false。

$ irb
>> system 'echo "hello $HOSTNAME"'
hello nate.local
=> true
>> system 'false'
=> false
>> puts $?
256
=> nil
>>
3.反引号(Backticks,Esc键下面那个键)
$ irb
>> today = `date`
=> "Mon Mar 12 18:15:35 PDT 2007n"
>> $?
=> #<Process::Status: pid=25827,exited(0)>
>> $?.to_i
=> 0
这种方法是最普遍的用法了。它也是运行在一个子shell中。
4.IO#popen
$ irb
>> IO.popen("date") { |f| puts f.gets }
Mon Mar 12 18:58:56 PDT 2007
=> nil
5.open3#popen3
$ irb
>> stdin, stdout, stderr = Open3.popen3('dc')
=> [#<IO:0x6e5474>, #<IO:0x6e5438>, #<IO:0x6e53d4>]
>> stdin.puts(5)
=> nil
>> stdin.puts(10)
=> nil
>> stdin.puts("+")
=> nil
>> stdin.puts("p")
=> nil
>> stdout.gets
=> "15n"
6.Open4#popen4
$ irb
>> require "open4"
=> true
>> pid, stdin, stdout, stderr = Open4::popen4 "false"
=> [26327, #<IO:0x6dff24>, #<IO:0x6dfee8>, #<IO:0x6dfe84>]
>> $?
=> nil
>> pid
=> 26327
>> ignored, status = Process::waitpid2 pid
=> [26327, #<Process::Status: pid=26327,exited(1)>]
>> status.to_i
=> 256

参考资料: http://soft6.com/html/tech/17/172478.shtml

并购之家
2011-08-05 · 超过22用户采纳过TA的回答
知道答主
回答量:129
采纳率:0%
帮助的人:51.7万
展开全部
应该说,ruby,python都属于脚本语言,都能够完成软件开发的几乎大部分功能。
只是各自在不同的领域受欢迎程度不一样,易用性,开发体验不一样。
比如:ruby在软件测试方面表现优异, 在web开发方面有ruby on Rails框架作为支撑,表现也很优异。
python在网络开发上比较受欢迎。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
太阳小姐的树屋

2011-08-03 · TA获得超过859个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:93.5万
展开全部
这个问题好多啊
python是面向对象的脚本语言
ruby是类似于Lisp的脚本语言
基本的脚本语法肯定不一样,其他的深层区别要对两个脚本都熟悉才行

脚本交互好像不太方便
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式