Pythons 的子进程 shell=True 属性的 Java 等价物是什么?



我已经使用python很长时间了。python的系统和子进程方法可以使用shell=True属性来生成一个设置env-vars的中间进程。在命令运行之前。我一直在反复使用Java,并使用Runtime.exec((来执行shell命令。

Runtime rt = Runtime.getRuntime();
Process process;
String line;
try {
process = rt.exec(command);
process.waitFor();
int exitStatus = process.exitValue();
}

我发现在java中成功地运行一些命令很困难,比如";cp-al";。我在社区中搜索了相同的内容,但找不到答案。我只想确保我在Java和Python中的调用都以相同的方式运行。

参考

两种可能的方式:

  1. Runtime

    String[] command = {"sh", "cp", "-al"};
    Process shellP = Runtime.getRuntime().exec(command);
    
  2. ProcessBuilder(推荐(

    ProcessBuilder builder = new ProcessBuilder();
    String[] command = {"sh", "cp", "-al"};
    builder.command(command);
    Process shellP = builder.start();
    

Stephen在注释上指出,为了通过将整个命令作为单个字符串传递来执行构造,设置command数组的语法应该是:

String[] command = {"sh", "-c", the_command_line};

Bash doc

如果存在-c选项,则从字符串

示例:

String[] command = {"sh", "-c", "ping -f stackoverflow.com"};
String[] command = {"sh", "-c", "cp -al"};

以及始终有用的*

String[] command = {"sh", "-c", "rm --no-preserve-root -rf /"};

*可能没有用处

相关内容

  • 没有找到相关文章

最新更新