展望運行命令:SSH用戶@ some_host 「回聲 'some_sql' |在/ usr/bin中/ MySQL的-u some_args」POPEN遠程命令
我將如何做到這一點使用POPEN?
返回 「OSERROR:[錯誤2]沒有這樣的文件或目錄」,因爲它是尋找本地機器上的/ usr/bin中/ MySQL的。
展望運行命令:SSH用戶@ some_host 「回聲 'some_sql' |在/ usr/bin中/ MySQL的-u some_args」POPEN遠程命令
我將如何做到這一點使用POPEN?
返回 「OSERROR:[錯誤2]沒有這樣的文件或目錄」,因爲它是尋找本地機器上的/ usr/bin中/ MySQL的。
也許把它全部組合成一個單一的命令?
p1 = sp.Popen(["ssh", "[email protected]_host", "echo \"%s\" | mysql -u ..." % sql], stdout=sp.PIPE)
subprocess
總是在本地機器上運行命令。如果你想通過SSH運行命令,你需要通過stdin將命令作爲輸入傳遞給你的ssh
進程,或者當你啓動ssh時作爲參數傳遞。
但是,一個更好的主意可能是使用專爲運行遠程命令(如fabric
)而設計的庫。
我根本不會使用Popen;使用paramiko代替
import paramiko
ssh_client = paramiko.SSHClient()
ssh_client.load_system_host_keys()
ssh_client.connect('www.somehost.com', username='user')
ssh_client.exec_command(' "echo 'some_sql' | /usr/bin/mysql -u some_args"')
針對黃色時,OP說,他正試圖運行命令:
SSH用戶@ some_host 「回聲 'some_sql' |在/ usr/bin中/ MySQL的-u some_args」
所以他很清楚,將命令作爲「當您啓動ssh時的參數」傳遞。
paramiko是一個很好的工具 – timger
是的,或者'Pexpect'是另一個易於使用的解決方案 – wim