내가 이 subprocess.check_call()이 작동하지 않는 이유는 무엇입니까?
import subprocess
args = ['rsync', '--rsh="ssh"', '/tmp/a/', '127.0.0.1:/tmp/b/']
subprocess.check_call(args)
우분투 (12)
에 파이썬 2.7 이러한 미리보기를 실행하고있어import subprocess
args = ['rsync', '--rsh="ssh"', '/tmp/a/', '127.0.0.1:/tmp/b/']
call_string = ' '.join(args)
subprocess.check_call(call_string)
작품
잘못된 명령 줄을 받고 rsync와의 첫 번째 코드 결과를 실패합니다. 이 옵션의 짧은 버전 (-e
)을 사용해도 아무런 차이가 없습니다. --rsh
부분을 제거하면 올바르게 작동합니다.
shell=True
을 사용하면 아무런 차이가 없습니다. "ssh"에서 따옴표를 제거해도 아무런 차이가 없으며 따옴표를 유지하여 ssh에 인수를 전달할 수 있습니다.
무엇이 문제입니까?
2 명령이 실패합니다. 그것이 작동한다면'check_call()'(또는 그것이 사용하는 함수)가'shell = True'로 재정의되었습니다. 'shell = False' (기본값)로 첫 번째 명령을 시도하십시오. 'print (inspect.getsource (subprocess.check_call)) '를보십시오 – jfs
BTW, 처음에는이 옵션이 필요합니까? 내'rsync'는 항상 지난 10 년 동안 ots 자신의 ssh를 사용했습니다 ... – glglgl
@glglglg : 결국 rsync가 시작하는 ssh 인스턴스에 몇 가지 인수를 추가하고 싶습니다. – JivanAmara