如何通过SSH将regex参数传递给另一个脚本

时间:2012-01-04 16:15:07

标签: python regex ssh

我想调用一个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行:意外标记附近的语法错误('
bash: -c: line 0:
python /home/log/scripts/script2.py(.*)'

为什么第二个例子中的参数没有被转义?如果我在没有SSH的情况下在本地调用 script2.py ,则不会发生这种情况。



使用解决方案进行更新:

原来解决方案是使用子进程,但传递参数不起作用,所以我必须格式化最后一个参数以包含转义的正则表达式:

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

1 个答案:

答案 0 :(得分:2)

试试这个:

import subprocess
output = subprocess.check_output(['ssh', 'otherserver', 'python', '/home/log/scripts/script2.py', regex])