Passing arguments to & executing, a python script on a remote machinefrom a python script on local m


A

ashish

Hi c.l.p folks

Here is my situation

1. I have two machines. Lets call them 'local' & 'remote'.
Both run ubuntu & both have python installed

2. I have a python script, local.py, running on 'local' which needs to passarguments ( 3/4 string arguments, containing whitespaces like spaces, etc ) to a python script, remote.py running on 'remote' (the remote machine).

I have the following questions:

1. What's the best way to accomplish my task ?
I have researched quite a bit & pretty much everybody is using ssh.
After googling a bunch, most people are using very complex workarounds to do this sort of thing.

I googled & found people using several libraries to accomplish ssh to remote machine & execute a command on remote machine.
paramiko ( now forked into the ssh moduke), fabric, pushy ,etc

People who have used any of these libraries, which one would you recommend,as the most apt (simple & easy to use, lightweight, best performance, etc)for my situation ?

2. I would prefer a solution, which does NOT require the installation of extra libraries on the local & remote machines.
If installing external librar

3. Has anybody been able to do this using os.system ?

I tried this
This worked, but if the arguments i tried to pass, had spaces, i was not able to 'escape' the spaces.

Any & all explanations/links/code snippets/thoughts/ideas/suggestions/feedback/comments/ of the Python tutor community would be greatly appreciated.

Thanks a ton

cheers
ashish

email :
ashish.makani
domain:gmail.com

“The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle. As with all matters of the heart, you’ll know when you find it.” - Steve Jobs (1955 - 2011)
 
Ad

Advertisements

I

Ismael Farfán

2012/9/19 ashish said:
Hi c.l.p folks

Here is my situation

1. I have two machines. Lets call them 'local' & 'remote'.
Both run ubuntu & both have python installed

2. I have a python script, local.py, running on 'local' which needs to pass arguments ( 3/4 string arguments, containing whitespaces like spaces, etc ) to a python script, remote.py running on 'remote' (the remote machine).

I have the following questions:

1. What's the best way to accomplish my task ?
I have researched quite a bit & pretty much everybody is using ssh.
After googling a bunch, most people are using very complex workarounds todo this sort of thing.

I googled & found people using several libraries to accomplish ssh to remote machine & execute a command on remote machine.
paramiko ( now forked into the ssh moduke), fabric, pushy ,etc

People who have used any of these libraries, which one would you recommend, as the most apt (simple & easy to use, lightweight, best performance, etc) for my situation ?

2. I would prefer a solution, which does NOT require the installation of extra libraries on the local & remote machines.
If installing external librar

3. Has anybody been able to do this using os.system ?

I tried this

This worked, but if the arguments i tried to pass, had spaces, i was not able to 'escape' the spaces.

How about something like this:
os.system ( 'ssh [email protected] python remote.py "arg 1" "arg 2" "arg 3"' )

Cheers
Ismael
 
E

Emile van Sebille

On 9/19/2012 12:50 PM ashish said...
Hi c.l.p folks

Here is my situation

1. I have two machines. Lets call them 'local' & 'remote'.
Both run ubuntu & both have python installed

2. I have a python script, local.py, running on 'local' which needs to pass arguments ( 3/4 string arguments, containing whitespaces like spaces, etc ) to a python script, remote.py running on 'remote' (the remote machine).

I have the following questions:

1. What's the best way to accomplish my task ?

Check out http://rpyc.sourceforge.net/ -- It's reasonably lightweight
and has been working well for our similar situation.

Emile
 
C

Chris Rebert

2. I have a python script, local.py, running on 'local' which needs to pass arguments ( 3/4 string arguments, containing whitespaces like spaces, etc ) to a python script, remote.py running on 'remote' (the remote machine).
3. Has anybody been able to do this using os.system ?

I tried this

This worked, but if the arguments i tried to pass, had spaces, i was not able to 'escape' the spaces.

Use the `subprocess` module instead (with shell=False). You then won't
need to worry about escaping.
http://docs.python.org/library/subprocess.html

Cheers,
Chris
 
P

Piet van Oostrum

Ismael Farfán said:
How about something like this:
os.system ( 'ssh [email protected] python remote.py "arg 1" "arg 2" "arg 3"' )

That won't work. You need an additional level of quoting because ssh is
also a shell so it adds another level of interpretation.

The following works:

os.system('''ssh [email protected] "python remote.py 'arg 1' 'arg 2' 'arg 3'"''')
 
Ad

Advertisements

P

Piet van Oostrum

Chris Rebert said:
Use the `subprocess` module instead (with shell=False). You then won't
need to worry about escaping.
http://docs.python.org/library/subprocess.html

You will still need to worry about escaping because on the remote end
you invoke ssh which is a shell. The obvious call:

subprocess.call(["ssh", "[email protected]", "python", "remote.py", "arg
1", "arg 2", "arg 3"])

won't work because ssh will break up the "arg n" strings. You need to
use "'arg n'" or put the whole python command in a string like:

"python TEST/testargs.py 'arg 1' 'arg 2' 'arg 3'"
 
Ad

Advertisements


Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top