Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run local python script on remote server

I'm debugging some python script that must run on my virtual machine. And, I prefer to edit the scripts locally(outside of virtual machines). So I find it's tedious to scp modified scripts to virtual machines every time. Can anyone suggests some effective way?

Particularly, I'm wondering if it's possible to execute python scripts on remote PVM. Something like that:

python --remote [email protected] hello.py //**FAKED**, served to explain ONLY 
like image 264
qweruiop Avatar asked Dec 10 '13 15:12

qweruiop


People also ask

How do I run a local python script on a remote server?

Using the paramiko library - a pure python implementation of SSH2 - your python script can connect to a remote host via SSH, copy itself (!) to that host and then execute that copy on the remote host. Stdin, stdout and stderr of the remote process will be available on your local running script.

How do I run a python script from another server?

If you want to run an entire script (such as a bash or even a python application) on another server from your local machine, you can make use of the SCP module to upload your script, then simply execute it using the same technique we used above with Paramiko.

How do I SSH into a python script?

SSH is widely used by network administrators for managing systems and applications remotely, allowing them to log in to another computer over a network, execute commands and move files from one computer to another. In python SSH is implemented by using the python library called fabric.


2 Answers

It is possible using ssh. Python accepts hyphen(-) as argument to execute the standard input,

cat hello.py | ssh [email protected] python - 

Run python --help for more info.

like image 106
asdfg Avatar answered Oct 07 '22 11:10

asdfg


Although this question isn't quite new and an answer was already chosen, I would like to share another nice approach.

Using the paramiko library - a pure python implementation of SSH2 - your python script can connect to a remote host via SSH, copy itself (!) to that host and then execute that copy on the remote host. Stdin, stdout and stderr of the remote process will be available on your local running script. So this solution is pretty much independent of an IDE.

On my local machine, I run the script with a cmd-line parameter 'deploy', which triggers the remote execution. Without such a parameter, the actual code intended for the remote host is run.

import sys import os  def main():     print os.name  if __name__ == '__main__':     try:         if sys.argv[1] == 'deploy':             import paramiko              # Connect to remote host             client = paramiko.SSHClient()             client.set_missing_host_key_policy(paramiko.AutoAddPolicy())             client.connect('remote_hostname_or_IP', username='john', password='secret')              # Setup sftp connection and transmit this script             sftp = client.open_sftp()             sftp.put(__file__, '/tmp/myscript.py')             sftp.close()              # Run the transmitted script remotely without args and show its output.             # SSHClient.exec_command() returns the tuple (stdin,stdout,stderr)             stdout = client.exec_command('python /tmp/myscript.py')[1]             for line in stdout:                 # Process each line in the remote output                 print line              client.close()             sys.exit(0)     except IndexError:         pass      # No cmd-line args provided, run script normally     main() 

Exception handling is left out to simplify this example. In projects with multiple script files you will probably have to put all those files (and other dependencies) on the remote host.

like image 39
Andreas N Avatar answered Oct 07 '22 11:10

Andreas N