Как передать аргумент регулярного выражения в другой скрипт через SSH - PullRequest
1 голос
/ 04 января 2012

Я хочу вызвать скрипт Python, script1.py , который принимает в качестве аргумента строку регулярного выражения. Затем этот скрипт подключается к другому серверу и вызывает script2.py .

script1.py

regex = sys.argv[1]
log = os.popen('ssh otherserver python /home/log/scripts/script2.py \"%s\"' % regex)
for line in log:
    print line.strip()
log.close()

script2.py

regex = re.compile(sys.argv[1])
for line in ['[1','[  2]',' a ']:
    if regex.search(line):
        print line.strip()

Проблема, с которой я сталкиваюсь, заключается в том, что скобки нарушают работу скрипта при запуске через SSH. Это работает:

[foo @ bar scripts] $ python script1.py ". *"
[1
[2]
а

Это не:

[foo @ bar scripts] $ python script1.py "(. *)"
bash: -c: строка 0: синтаксическая ошибка рядом с неожиданным токеном ('<br> bash: -c: line 0: python /home/log/scripts/script2.py (. *) '

Почему аргумент во втором примере не экранирован? Этого не происходит, если я вызываю script2.py локально без SSH.



Обновление с решением:

Оказывается, что решение использовало подпроцесс, но передача аргументов не работала, поэтому мне пришлось отформатировать последний аргумент, чтобы включить экранированное регулярное выражение:

log = subprocess.check_output(['ssh', 'eu1', 'nice', 'python', '/home/log/scripts/script2.py \"%s\"' % regex])
print log.strip()

1 Ответ

2 голосов
/ 04 января 2012

Попробуйте это:

import subprocess
output = subprocess.check_output(['ssh', 'otherserver', 'python', '/home/log/scripts/script2.py', regex])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...