我在Ubuntu 12.這個subprocess.check_call()爲什麼不起作用?
import subprocess
args = ['rsync', '--rsh="ssh"', '/tmp/a/', '127.0.0.1:/tmp/b/']
subprocess.check_call(args)
運行這些片段與Python 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。
有什麼問題?
第二個命令應該失敗。如果它能夠工作,那麼'check_call()'(或者它使用的函數)已經被'shell = True'重新定義了。用'shell = False'嘗試第一個命令(默認)。看看'print(inspect.getsource(subprocess.check_call))' – jfs
順便說一句,你是否需要這個選項呢?我的'rsync'在過去的10年中總是在'ssh'上使用'ssh' ... – glglgl
@glglglg:最後我想添加一些參數給rsync啓動的ssh實例。 – JivanAmara