我正在尝试使用python脚本中的命令行参数执行java程序。我在python中使用CommandRunner并调用其execute()方法,如下所示:
result = remote_command_runner_util.CommandRunner(command, host, user).execute()
当传入命令的java com.test.helloWorld
等输入参数以及一些有效的用户和主机变量时,我无法执行上述命令调用。
是否可以使用CommandRunner从Python调用java程序? (这是我唯一可用的选项)。
答案 0 :(得分:1)
唯一重要的技巧(从安全角度来看)是安全地逃避你的参数向量 - 如果使用subprocess
(因为它允许shell=False
),则可以避免这种情况,但是使用CommandRunner是不可避免的。
import pipes, shlex
if hasattr(pipes, 'quote'):
quote = pipes.quote # Python 2
else:
quote = shlex.quote # Python 3
def executeCommand(argv, host, user):
cmd_str = (' '.join(quote(arg) for arg in argv))
return remote_command_runner_util.CommandRunner(cmd_str, host, user).execute()
...之后用作:
executeCommand(['java', '-jar', '/path/to/remote.jar', 'com.test.helloWorld'], host, user)