我想调用一个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行:意外标记附近的语法错误('
python /home/log/scripts/script2.py(.*)'
bash: -c: line 0:
为什么第二个例子中的参数没有被转义?如果我在没有SSH的情况下在本地调用 script2.py ,则不会发生这种情况。
原来解决方案是使用子进程,但传递参数不起作用,所以我必须格式化最后一个参数以包含转义的正则表达式:
log = subprocess.check_output(['ssh', 'eu1', 'nice', 'python', '/home/log/scripts/script2.py \"%s\"' % regex])
print log.strip()
答案 0 :(得分:2)
试试这个:
import subprocess
output = subprocess.check_output(['ssh', 'otherserver', 'python', '/home/log/scripts/script2.py', regex])