php shell系统命令行_python读取shell命令行参数并执行shell命令 - CSDN
精华内容
参与话题
  • 命令行方式运行PHP脚本

    万次阅读 2008-03-13 19:07:00
    参考手册:http://www.php.net/manual/zh/features.commandline.php可执行文件 所有的PHP发行版,不论是编译自源代码的版本还是预创建的版本,都在默认... 要在你的系统上找到这个可执行文件,就要遵照下面的步骤: 

    参考手册:http://www.php.net/manual/zh/features.commandline.php

    可执行文件

        所有的PHP发行版,不论是编译自源代码的版本还是预创建的版本,都在默认情况下带有一个PHP可执行文件。这个可执行文件可以被用来运行命令行的PHP程序。

        要在你的系统上找到这个可执行文件,就要遵照下面的步骤:

            在Windows操作系统里,它被放在PHP主安装目录下,文件名是php.exe或者(在老版本的PHP里)是php-cli.exe。

            在Linux操作系统里,它被保存在PHP安装目录的bin/子目录下。

        不论是在哪一个操作系统里,你都需要对它进行测试,以保证它能够正常运行,方法是用-v参数调用它:

    shell> /path/to/php -v
    PHP 5.0.0 (cli) (built: Jun 1 2005 18:32:10)
    Copyright (c) 1997-2004 The PHP Group
    Zend Engine v2.0.0, Copyright (c) 1998-2004 Zend Technologies

    它应该会返回PHP的版本号。

    一个简单的PHP CLI程序
        一旦找到了这个CLI可执行文件,你就可以用一个简单的程序来使用一下。创建一个简单的文本文件,其中包含有以下PHP代码,并把它保存为hello.php:

    <?php
    echo "Hello from the CLI";
    ?>

        现在,试着在命令行提示符下运行这个程序,方法是调用CLI可执行文件并提供脚本的文件名:

    shell> /path/to/phphello.php
    Hello from the CLI

    使用标准的输入和输出
        PHP CLI会定义三个常量,以便让在命令行提示符下与解释器进行交互操作更加容易。这些常量见表格A。

    表格A

    常量 说明
    STDIN 标准的输入设备
    STDOUT 标准的输出设备
    STDERR 标准的错误设备

        你可以在自己的PHP脚本里使用这三个常量,以接受用户的输入,或者显示处理和计算的结果。要更好地理解这一点,可以看看下面的脚本(列表A):

    列表A
    <?php
    // ask for input
    fwrite(STDOUT, "Enter your name: ");

    // get input
    $name = trim(fgets(STDIN));

    // write input back
    fwrite(STDOUT, "Hello, $name!");
    ?>
    Look what happens when you run it:
    shell> /path/to/phphello.php
    Enter your name: Joe
    Hello, Joe!

        在这个脚本里,fwrite()函数首先会向标准的输出设备写一条消息,询问用户的姓名。然后它会把从标准输入设备获得的用户输入信息读取到一个PHP变量里,并它把合并成为一个字符串。然后就用fwrite()把这个字符串打印输出到标准的输出设备上。

    使用命令行自变量
        在命令行里输入程序参数来更改其运行方式是很常见的做法。你也可以对CLI程序这样做。PHP CLI带有两个特殊的变量,专门用来达到这个目的:一个是$argv变量,它通过命令行把传递给PHP脚本的参数保存为单独的数组元素;另一个是$argc变量,它用来保存$argv数组里元素的个数。

        用PHP脚本编写一段读取$argv并处理它所含参数的代码是很简单的。试试列表B里的示例脚本,看看它是如何工作的:

    列表B
    <?php
    print_r($argv);
    ?>

    Run this script by passing it some arbitrary values, and check the output:

    shell> /path/to/phptest.php chocolate 276 "killer tie, dude!"
    Array
    ( [0] => test.php
    [1] => chocolate
    [2] => 276
    [3] => killer tie, dude!
    )

        正如你可以从输出的结果看到的,传递给test.php的值会自动地作为数组元素出现在$argv里。要注意的是,$argvis的第一个自变量总是脚本自己的名称。

      下面是一个更加复杂的例子(列表C):

    列表C
    <?php
    // check for all required arguments
    // first argument is always name of script!
    if ($argc != 4) {
    die("Usage: book.php <check-in-date> <num-nights> <room-type> ");
    }

    // remove first argument
    array_shift($argv);

    // get and use remaining arguments
    $checkin = $argv[0];
    $nights = $argv[1];
    $type = $argv[2];
    echo "You have requested a $type room for $nights nights, checking in on $checkin. Thank you for your order! ";
    ?>

        下面是其用法的示例:

    shell> /path/to/phpbook.php 21/05/2005 7 single
    You have requested a single room for 7 nights, checking in on 21/05/2005. Thank you for your order!

        在这里,脚本首先会检查$argc,以确保自变量的数量符合要求。它然后会从$argv里提取出每一个自变量,把它们打印输出到标准的输出设备上。

        注意:你可以用Console_Getopt PEAR类向PHP增加更加复杂的命令行参数。

    使用CLI参数
        除了用命令行传递PHP脚本参数,你还可以传递PHP CLI参数以更改其工作方式。表格B就是一些重要参数的列表:

    表格B

    参数 说明
    -a 交互式运行Run interactively
    -c path 从path读取php的.ini文件
    -n 不用读取php的.ini文件就直接运行
    -m 列出经过编译的模块
    -i 显示有关PHP构建的信息
    -l 检查PHP脚本的句法
    -s 以彩色方式显示源代码
    -w 显示去掉注释之后的源代码
    -h 显示帮助

    交互模式
        你还可以以交互方式使用PHP CLI,也就是输入命令,马上获得结果。要得到这种效果,只需要使用一个参数调用CLI可执行文件就行了,就像下面这样:

    shell> /path/to/php -a

        你会看到一个空行,你可以在里面输入PHP代码。看看:

    shell> /path/to/php -a
    Interactive mode enabled
    <?php
    echo mktime();
    1121187283
    echo 2+2;
    4
    exit();
    shell>

        或者,你可以不使用-a参数就调用CLI可执行文件,直接输入完整的脚本或者代码段。用<Ctrl>-D来结束代码段,并让CLI来执行它。见下面的例子:

    shell> /path/to/php
    <?php
    echo date("d-M-Y h:i:s", time());
    ?>
    <Ctrl-D>
    12-Jul-2005 06:54:04

        这就是PHP的命令行,现在你应该已经对PHP CLI有了足够的了解,并开始使用它了。

     
    展开全文
  • php接收来自命令行输入的参数

    千次阅读 2013-05-15 15:16:24
    今天开始php管理linux系统的第二个脚本,接收来自命令行输入的参数。 在shell中,我们可以使用read来读取用户从命令行输入的参数。同样,php也可以实现,使用fwrte与fgets。 下面是php接收来自命令行输入的...
    今天开始php管理linux系统的第二个脚本,接收来自命令行输入的参数。

    在shell中,我们可以使用read来读取用户从命令行输入的参数。同样,php也可以实现,使用fwrte与fgets。

    下面是php接收来自命令行输入的参数的脚本

    #!/bin/php
    <?php

      fwrite(STDOUT,"Please input a argument:");
      $arg = trim(fgets(STDIN));
      echo $arg."\n";

    ?>

    STDOUT代表标准输出,STDIN代表标准输入。
    fwrite表示往标准输出写一个字符串,则我们就看到了命令行的Please input a argument:

    由于下面紧跟fgets,则命令行会出现等待的字样。输入之后,使用trim函数去掉输入内容开头结尾的空白换行符等。

    echo表示输出。

    到此,php管理linux系统第二个脚本php接收来自命令行输入的参数编写完毕


    注:此方法同样适用与windows下的cmd运行php脚本。

    来源:http://www.linuxmr.com/php_linux-285-1.html

    展开全文
  • popen+pclose 执行 shell 命令

    千次阅读 2016-02-18 21:57:21
    在《system() 执行 shell 命令》中,我们介绍了 system 执行 shell 命令的方法,system 返回值比较混乱,难以理解,而且 popen 在处理子进程标准输出上会很方便。 注意:管道只能处理标准输出,不能处理标准错误输出...

    在《system() 执行 shell 命令》中,我们介绍了 system 执行 shell 命令的方法,system 返回值比较混乱,难以理解,而且 popen 在处理子进程标准输出上会很方便。

    注意:管道只能处理标准输出,不能处理标准错误输出。


    popen 和 pclose 的实现与 system 类似,多了一步创建管道的操作。

    popen 成功返回 FILE 句柄,失败返回 NULL, 失败的原因可能为 fork 或 pipe 失败,也可能为分配内存失败;

    pclose 失败返回 -1, 成功则返回 exit status, 同 system 类似,需要用 WIFEXITED, WEXITSTATUS 等获取命令返回值。


    此外,同 system 类似, pclose 会等待进程退出,如果等不到进程退出(例如已经被 wait 回收),则 error 设置为 ECHILD.

    注意:

    1. pclose 仅仅是为了回收子进程,避免僵尸进程的产生;

    2. 和 system 一样,SIGCHLD  依然会影响 popen,见示例程序。

    #include <stdio.h>
    #include <errno.h>
    #include <stdlib.h>
    #include <string.h>
    #include <signal.h>
    
    typedef void (*sighandler_t)(int);
    
    int main(int argc, char* argv[])
    {
        char cmd[1024];
        char line[1024];
        FILE* pipe;
        int rv;
    
        if (argc != 2)
        {
            printf("Usage: %s <path>\n", argv[0]);
            return -1;
        }
    
        // pclose fail: No child processes
        signal(SIGCHLD, SIG_IGN);
        
        
        snprintf(cmd, sizeof(cmd), "ls -l %s 2>/dev/null", argv[1]);
    
        //sighandler_t old_sighandler = signal(SIGCHLD, SIG_DFL);
        pipe = popen(cmd, "r");
        if(NULL == pipe)
        {
            printf("popen() failed: %s\n", cmd);
            return -1;
        }
        
        while(fgets(line, sizeof(line),pipe) != NULL)
        {
            printf("%s", line);
        }
    
    
        rv = pclose(pipe);
        //signal(SIGCHLD, old_sighandler);
        
        if (-1 == rv)
        {
            printf("pclose() failed: %s\n", strerror(errno));
            return -1;
        }
        
        if (WIFEXITED(rv))
        {
            printf("subprocess exited, exit code: %d\n", WEXITSTATUS(rv));
            if (0 == WEXITSTATUS(rv))
            {
                // if command returning 0 means succeed
                printf("command succeed\n");
            }
            else
            {
                if(127 == WEXITSTATUS(rv))
                {
                    printf("command not found\n");
                    return WEXITSTATUS(rv);
                }
                else
                {
                    printf("command failed: %s\n", strerror(WEXITSTATUS(rv)));
                    return WEXITSTATUS(rv);
                }
            }
        }
        else
        {
            printf("subprocess exit failed\n");
            return -1;
        }
     
        return 0;
    }
    

    说明:

    1. 将 SIGCHLD 忽略之后,pclose 不能回收子进程退出信息,errno 为 ECHILD, 错误信息为 "No child processes";

    2. 由于管道不能捕获 stderr, 因此命令将 stderr 重定向至 /dev/null.


    展开全文
  • Redis命令行批量删除相同前缀的key

    千次阅读 2019-09-20 16:11:56
    比如我要删除redis中所有前缀为topic的key,在shell命令行 redis-cli KEYS "topic*" | xargs redis-cli DEL redis-cli已经设置为系统变量了可以直接使用上面的命令 如果没有,redis-cli应该替换为redis完整路径 ...

    比如我要删除redis中所有前缀为topic的key,在shell命令行

    redis-cli KEYS "topic*" | xargs redis-cli DEL


    redis-cli已经设置为系统变量了可以直接使用上面的命令
    如果没有,redis-cli应该替换为redis完整路径

    展开全文
  • shell调用php脚本,并传递参数

    千次阅读 2013-06-28 15:34:00
    命令行执行带参数的php脚本,并取得参数 张映 发表于 2011-07-15 分类目录: php 一,为什么我们要在命令行下运行php脚本呢? 个人理解,主要有二个原因: 1,利用crontab去跑php,可以给服务器...
  • PHP判断是否命令行运行的最好办法

    千次阅读 2015-07-18 18:21:45
    然后再加上判断是否存在$_SERVER['SHELL']变量就行。上代码: #!/usr/bin/php if (!isset($_SERVER['SHELL'])) {  header('location:/Public/404.html');  exit; } // 网点定时任务采集网点数据 if...
  • PHP 常用命令行

    万次阅读 2017-04-13 16:37:51
    2、命令行直接运行PHP代码php -r "phpinfo();" 如果结果太长,还可以 php -r “phpinfo();” | less 分页展示3、交互模式运行PHP简单的运算 control + c/z 或者 exit 退出交互模式函数上面输出结果中返回的数据类型...
  • 命令行启动和停止GNOME

    万次阅读 2013-12-15 13:45:34
    http://tombuntu.com/index.php/2008/02/08/starting-and-stopping-gnome-from-the-command-line/
  • win10系统phpstorm改用PowerShell终端

    万次阅读 2019-11-10 16:33:22
    习惯了linux的命令行操作, windowns的cmd都不支持,现在好了win10的PowerShell支持了linux命令操作。 文件--》设置--》工具--》Terminal 将Shell path路径改为C:\WINDOWS\System32\WindowsPowerShell\v1.0\...
  • /*** * 终端给提示获取用户数据 */ function read($str = '请输入') { //提示输入 fwrite(STDOUT, $str . ":"); //获取用户输入数据 $result = trim(fgets(STDIN)); return trim($result);...效果
  • 手机敲命令利器---Android Terminal

    万次阅读 2013-12-14 16:11:50
    实用利器直接android手机上,运行linux终端,使用linux命令,编写运行shell脚本,vi编辑,调试log采集过滤,甚至shutdown。
  • application\common.php文件内容如下: ... 'app\shell\command\Test', ]; application\shell\command\Test.php内容如下: namespace app\shell\command; use think\console\Command; use think\console\Input...
  • ubuntu16.04命令行模式黑屏解决办法

    千次阅读 2017-03-16 15:38:56
    ubuntu16.04命令行模式黑屏解决办法问题描述在ubuntu上装Nvidia的显卡驱动,需要关闭图形界面才能安装驱动,但是,出现如下情况: 使用“ctrl+alt+F1”命令进入命令行界面是黑屏 使用“sudo service lightdm stop”...
  • 命令行上调用notepad++

    千次阅读 2014-09-26 11:32:35
    Notepad++命令行参数 Notepad++.exe [-multiInst] [-noPlugin] [-ro] [-nosession] [-notabbar] [-n##] [-l$$$] [FILES] Note
  • windows下使用命令行运行PHP

    千次阅读 2016-04-14 14:37:52
    之前一直想,在命令行下能不能运行PHP程序,像C语言一样可以通过命令行拿到参数。今天尝试了一下发现可感觉挺有意思的,平时写着程序玩的时候就可以这样用,下面让咱么来看看怎么做的。 我的环境是 php5.6 ...
  • PHP命令行下的世界

    千次阅读 2017-02-01 14:15:38
    PHP作为一门web开发语言,通常情况下我们都是在Web Server中运行PHP,使用浏览器访问,因此很少关注其命令行操作以及相关参数的使用,但是,特别是在类Unix操作系统上,PHP可以作为一门脚本语言执行与shell类似的...
  • (15)学习tp5之 自定义命令行

    千次阅读 2018-06-02 10:08:23
    手册-》命令行-》自定义命令行 1、第一步,配置command.php文件2、第二步,建立命令类文件注意:该文件中代码,从文档中粘,以防写错。名字啥的都不用改,就改命名空间 和 定义命令、执行命令需要的东西3、测试-...
  • 请问下,我想执行shell_exec(cmd: "java -jar"." ".$config." ".$file1); 错误提示:Parse error: syntax error, unexpected ':' in D:\phpStudy\PHPTutorial... shell_exec执行cmd命令行是不是还要开启配置的?
  • python 调用系统命令,执行命令行

    万次阅读 2015-11-19 16:04:42
    python中调用系统命令的方法还是有比较多的,os/command/subprocess模块中都有方法可以做到 **(1) os.system** **(2) os.popen** **(3) 使用模块commands模块** :getoutput和getstatusoutput **(4) subprocess**
1 2 3 4 5 ... 20
收藏数 31,748
精华内容 12,699
关键字:

php shell系统命令行