如何通过SSH将正则表达式参数传递给另一个脚本

1 投票
1 回答
1160 浏览
提问于 2025-04-17 09:32

我想要调用一个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]
a

这个就不行:

[foo@bar scripts]$ python script1.py "(.*)"
bash: -c: line 0: syntax error near unexpected token ('
bash: -c: line 0:
python /home/log/scripts/script2.py (.*)'

为什么第二个例子中的参数没有被转义呢?如果我在本地调用script2.py而不通过SSH,就不会出现这个问题。



更新解决方案:



结果发现解决方案是使用subprocess模块,但传递参数时不太奏效,所以我必须格式化最后一个参数,以包含转义后的正则表达式:

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

1 个回答

2

试试这个:

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

撰写回答