Выполнение java-программы с использованием CommandRunner

jrd спросил: 28 марта 2018 в 03:31 в: python

Я пытаюсь выполнить java-программу с аргументом командной строки из скрипта python. Я использую CommandRunner в python и вызывая его метод execute () следующим образом:

result = remote_command_runner_util.CommandRunner(command, host, user).execute()

Я не могу выполнить вышеупомянутый командный вызов при передаче входных параметров, таких как java com.test.helloWorld для команды и с некоторыми допустимыми переменными пользователя и хоста.

Можно ли вызывать Java-программу из Python с помощью CommandRunner? (это единственный доступный для меня вариант).

1 ответ

Charles Duffy ответил: 28 марта 2018 в 03:44

Единственный важный трюк (с точки зрения безопасности) - это безопасный экранирование вектора аргументов - чего следует избегать при использовании subprocess (так как он допускает shell=False), но неизбежно при использовании CommandRunner.

import pipes, shlex
if hasattr(pipes, 'quote'):
    quote = pipes.quote       # Python 2
else:
    quote = shlex.quote       # Python 3def 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)