Unix 환경의 함수에서 명령을 사용하여 ssh
원격 스크립트를 호출하려고 하는데 원격 스크립트에 문자열 매개변수(공백 포함)를 제공해야 합니다. 그러나 Python 스크립트를 실행하면 문자열 매개변수가 올바르게 해석되지 않습니다.subprocess.call
Python 2.6.8
이것은 내 파이썬 스크립트입니다:-
#!/usr/bin/python
from subprocess import call
ret=call(['ssh','user@host','\"/remote/path/to/script/test.sh','\'Hi','There\'\"'])
print ret
ret2=call(['ssh','user@host','/remote/path/to/script/test.sh','Hello'])
print ret2
오류와 함께 다음 출력이 표시되고 returncode 127
"빈 문자열"이 포함된 ssh 명령의 경우 두 번째 ssh 명령이 정상적으로 실행됩니다 returncode 0
.
bash: /remote/path/to/script/test.sh 'Hi There': No such file or directory
127
Hello
0
쉘 명령줄 터미널에서 동일한 쉘 명령을 실행하면 성공적으로 실행됩니다.
Command:
ssh user@host "/remote/path/to/script/test.sh 'Hi There'";echo $?
Output:
Hi There
0
원격 스크립트의 내용은 다음과 같습니다 /remote/path/to/script/test.sh
(도움이 되는 경우).
#!/usr/bin/ksh
echo $1;
답변1
작업 버전을 대체하는 문자열을 인용하면 됩니다 . Hello
예 '"Hi There"'
:
ret = call(['ssh','user@host','/remote/path/to/script/test.sh','"Hi There"'])