我在\ tmp \ _的位置有一个python文件。这个文件打印出来并返回退出代码22.我能用putty完美地运行这个脚本但是不能用paramiko模块来运行。
这是我的执行代码
import paramiko
def main():
remote_ip = '172.xxx.xxx.xxx'
remote_username = 'root'
remote_password = 'xxxxxxx'
remote_path = '/tmp/ab.py'
sub_type = 'py'
commands = ['echo $?']
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(remote_ip, username=remote_username,password=remote_password)
i,o,e = ssh_client.exec_command('/usr/bin/python /tmp/ab.py')
print o.read(), e.read()
i,o,e = ssh_client.exec_command('echo $?')
print o.read(), e.read()
main()
这是我在远程机器上执行的python脚本
#!/usr/bin/python
import sys
print "hello world"
sys.exit(20)
我无法理解我的逻辑中究竟出了什么问题。另外当我做cd \ tmp然后ls时,我仍然会在根文件夹中。
答案 0 :(得分:2)
以下示例通过ssh运行命令,然后获取命令stdout,stderr并返回代码:
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='hostname', username='username', password='password')
channel = client.get_transport().open_session()
command = "import sys; sys.stdout.write('stdout message'); sys.stderr.write(\'stderr message\'); sys.exit(22)"
channel.exec_command('/usr/bin/python -c "%s"' % command)
channel.shutdown_write()
stdout = channel.makefile().read()
stderr = channel.makefile_stderr().read()
exit_code = channel.recv_exit_status()
channel.close()
client.close()
print 'stdout:', stdout
print 'stderr:', stderr
print 'exit_code:', exit_code
希望有所帮助
答案 1 :(得分:0)
每次运行exec_command时,都会启动一个新的bash子进程。
这就是为什么当你运行类似的东西时:
exec_command("cd /tmp");
exec_command("mkdir hello");
dir“hello”是在dir中创建的,而不是在tmp中创建的。
尝试在同一个exec_command调用中运行多个命令。
另一种方法是使用python的os.chdir()