• script cmd / Execute a system command


    24种语言执行外部命令的方法

    http://www.cocoachina.com/b/?p=171

    http://rosettacode.org/wiki/Execute_a_System_Command

    In this task, the goal is to run either the ls (dir on Windows) system command, or the pause system command.

    Contents

      [hide]

    在这个例子中展示用不同语言调用外部命令的方法。觉得这个挺有意思,转来给大家看看,也许某一天你会觉得有用。

    这些语言包括

    Ada
    AppleScript
    C
    C++
    C#
    E
    Forth
    Haskell
    IDL
    J
    Java
    Logo
    MAXScript
    Objective-C
    OCaml
    Perl
    PHP
    Pop11
    Python
    Raven
    Ruby
    Tcl
    Toka
    UNIX Shell

     

     

    原文在 http://www.rosettacode.org/wiki/Execute_a_System_Command

     Ada

    with Interfaces.C; use Interfaces.C;

    procedure Execute_System is

       function Sys (Arg : Char_Array) return Integer;

       pragma Import(C, Sys, "system");

       Ret_Val : Integer;

    begin

       Ret_Val := Sys(To_C("ls"));

    end Execute_System;

    AppleScript

    do shell script "ls" without altering line endings

    C

    支持版本 gcc version 4.0.1

    平台: BSD

    #include <stdlib.h>

    int main()

    {

        system("ls");

    }

    C++

    支持版本: Visual C++ version 2005

    system("pause");

    C#

    支持版本: MCS version 1.2.3.1

    using System;

     class Execute {

        static void Main() {

            System.Diagnostics.Process proc = new System.Diagnostics.Process();

            proc.EnableRaisingEvents=false;

            proc.StartInfo.FileName="ls";

            proc.Start();

       }

    }

    E

    def ls := makeCommand("ls")

    ls("-l")

    def [results, _, _] := ls.exec(["-l"])

    when (results) -> {

      def [exitCode, out, err] := results

      print(out)

    } catch problem {

      print(`failed to execute ls: $problem`)

    }

    Forth

    支持版本: gforth version 0.6.2

    s" ls" system

    Haskell

    支持版本: GHCi version 6.6

    import System.Cmd

    main = system "ls" 

    IDL

    带屏幕输出的 "ls" : 

    $ls

    将输出保存到数组"result":

    spawn,"ls",result

    异步执行,将输出转到LUN "unit",以便在以后读取:

    spawn,"ls",unit=unit

    J

    J语言系统命令界面由标准的"task"脚本提供:

       load’task’

       NB.  Execute a command and wait for it to complete

       shell ‘dir’

       NB.  Execute a command but don’t wait for it to complete 

       fork ‘notepad’

       NB.  Execute a command and capture its stdout

       stdout   =:  shell ‘dir’  

       NB.  Execute a command, provide it with stdin, 

       NB.  and capture its stdout

       stdin    =:  ‘blahblahblah’

       stdout   =:  stdin spawn ‘grep blah’

    Java

    支持版本: Java version 1.4+

    有两种执行系统命令的方法,简单的方法会挂起JVM

    import java.io.IOException;

    import java.io.InputStream;

    public class MainEntry {

        public static void main(String[] args) {

            executeCmd("ls -oa");

        }

        private static void executeCmd(String string) {

            InputStream pipedOut = null;

            try {

                Process aProcess = Runtime.getRuntime().exec(string);

                aProcess.waitFor();

                pipedOut = aProcess.getInputStream();

                byte buffer[] = new byte[2048];

                int read = pipedOut.read(buffer);

                // Replace following code with your intends processing tools

                while(read >= 0) {

                    System.out.write(buffer, 0, read);

                    read = pipedOut.read(buffer);

                }

            } catch (IOException e) {

                e.printStackTrace();

            } catch (InterruptedException ie) {

                ie.printStackTrace();

            } finally {

                if(pipedOut != null) {

                    try {

                        pipedOut.close();

                    } catch (IOException e) {

                    }

                }

            }

        }

    }

    正确的方法使用进程提供的线程去读取InputStream。

    import java.io.IOException;

    import java.io.InputStream;

    public class MainEntry {

        public static void main(String[] args) {

            // the command to execute

            executeCmd("ls -oa");

        }

        private static void executeCmd(String string) {

            InputStream pipedOut = null;

            try {

                Process aProcess = Runtime.getRuntime().exec(string);

                // These two thread shall stop by themself when the process end

                Thread pipeThread = new Thread(new StreamGobber(aProcess.getInputStream()));

                Thread errorThread = new Thread(new StreamGobber(aProcess.getErrorStream()));

                pipeThread.start();

                errorThread.start();

                aProcess.waitFor();

            } catch (IOException e) {

                e.printStackTrace();

            } catch (InterruptedException ie) {

                ie.printStackTrace();

            }

        }

    }

    class StreamGobber implements Runnable {

        private InputStream Pipe;

        public StreamGobber(InputStream pipe) {

            if(pipe == null) {

                throw new NullPointerException("bad pipe");

            }

            Pipe = pipe;

        }

        public void run() {

            try {

                byte buffer[] = new byte[2048];

                int read = Pipe.read(buffer);

                while(read >= 0) {

                    System.out.write(buffer, 0, read);

                    read = Pipe.read(buffer);

                }

            } catch (IOException e) {

                e.printStackTrace();

            } finally {

                if(Pipe != null) {

                    try {

                        Pipe.close();

                    } catch (IOException e) {

                    }

                }

            }

        }

    }

    Logo

    支持版本: UCB Logo

    SHELL命令返回列表:

    print first butfirst shell [ls -a]   ; ..

    MAXScript

    dosCommand "pause"

    Objective-C

    支持版本:苹果公司的GCC version 4.0.1

    void runls()

    {

        [[NSTask launchedTaskWithLaunchPath:@"/bin/ls"

            arguments:[NSArray array]] waitUntilExit];

    }

    如果你希望调用系统命令,先执行shell:

    void runSystemCommand(NSString *cmd)

    {

        [[NSTask launchedTaskWithLaunchPath:@"/bin/sh"

            arguments:[NSArray arrayWithObjects:@"-c", cmd, nil]]

            waitUntilExit];

    }

    同样可以使用上面的C语言调用方法。

    OCaml

    Sys.command "ls"

    Perl

    my @results = qx(ls);

    # runs command and returns its STDOUT

    my @results = `ls`;

    # dito, alternative syntax

    system "ls";

    # runs command and returns its exit status

    print `ls`;

    #The same, but with back quotes

    exec "ls";

    # replace current process with another

    另外可以参阅 http://perldoc.perl.org/perlipc.html#Using-open()-for-IPC http://perldoc.perl.org/IPC/Open3.html

    PHP

    首行执行命令,第二行显示输出:

    @exec($command,$output);

    echo nl2br($output);

    注意这里的‘@’防止错误消息的显示,‘nl2br’ 将 ‘\n’转换为HTML的‘br’ 

    Pop11

    sysobey(’ls’);

    Python

    支持版本: Python version 2.5

     import os

     code = os.system(’ls’) # Just execute the command, return a success/fail code

     output = os.popen(’ls’).read() # If you want to get the output data

    或者

    支持版本: Python version 2.4 (及以上版本)

     import subprocess

     output = subprocess.Popen(’ls’, shell=True, stdout=subprocess.PIPE).stdout

     print output.read()

    后者是比较好的方法。

    或者

    支持版本: Python version 2.2 (及以上版本)

     import commands

     stat, out = commands.getstatusoutput(’ls’)

     if not stat:

        print out

    Raven

    `ls -la` as listing

    或者指定任何字符串

    ‘ls -la’ shell as listing

    Ruby

    string = `ls`

    Tcl

      puts [exec ls]

    同样可以使用系统open命令。

     set io [open "|ls" r]

    获取结果的方法是

     set nextline [gets $io]

    或者

     set lsoutput [read $io]

    如果命令是以RW方式打开,可以用同样的方法发送用户的输入。

    Toka

     needs shell

     " ls" system

    UNIX Shell

    直接调用

    ls

    如果希望获取标准输出

    CAPTUREDOUTPUT=$(ls)

    在 C-Shell 中可以这样做

    set MYCMDOUTPUT = `ls`

    echo $MYCMDOUTPUT 

    在Korn Shell 中是这样:

     MYCMDOUTPUT=`ls`

     echo $MYCMDOUTPUT

    end

  • 相关阅读:
    分布式计算的基本概念
    OpenMP 并行程序设计入门
    HPC —— 高性能计算
    算法、模型的介绍
    算法、模型的介绍
    机器学习、深度学习实战细节(batch norm、relu、dropout 等的相对顺序)
    机器学习、深度学习实战细节(batch norm、relu、dropout 等的相对顺序)
    编码(encode)问题
    UVa 10048: Audiophobia
    C++编写ATM(1)
  • 原文地址:https://www.cnblogs.com/lindows/p/14390345.html
Copyright © 2020-2023  润新知