954,119 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

python and bash

I'm working on making a server control panel in python (like cpanel, plesk, etc) and wanted to know if any one knew of some tutorials on using bash and python together for creating users and stuff on a *nix system.

Also if any one knows of a tutorial on using paypal with python that would be sweet!

thanks!

joey101
Light Poster
45 posts since Nov 2004
Reputation Points: 10
Solved Threads: 0
 

i am pretty new to python, but are you talking about the os module? So long as your python script is started by bash, you have access to all of your system command using bash. example
[php]
import os
os.system('enter your bash command here')
os.system('/usr/sbin/useradd brian')
[/php]

shanenin
Posting Whiz in Training
217 posts since May 2005
Reputation Points: 10
Solved Threads: 17
 

Does doing it like that return a value?

joey101
Light Poster
45 posts since Nov 2004
Reputation Points: 10
Solved Threads: 0
 

sure it returns the output of the command, and also any errors that bash produces. If the command used does not usually give output, it will still return the exit status of the command. for example

>>> os.system('mkdir newdirectory')
0


so you can test for a succesful execution of the command like this

>>> return_value = os.system('mkdir newdirectory')
>>> if return_value == 0:
...     print "it executed without errors"
...
it executed without errors


here is something you need to watch out for. an exit stauts of a command execution of other then 0, will be changed using python. So you need to use this module os.WEXITSTATUS

for example. if using the grep command on a linux system, and the value is not found, it will return an exit status of 1. Using this with the os.system module with python will change it. here is an example

>>> os.system('cat grepfile | grep "non-existant string"')
256

it should be giving a return value of 1(not 256), since the string was not found. that can be corrected using os.WEXITSTATUS

>>> os.WEXITSTATUS(os.system('cat grepfile | grep "non-existant string"'))
1
shanenin
Posting Whiz in Training
217 posts since May 2005
Reputation Points: 10
Solved Threads: 17
 

ok, that's pretty cool! Thanks!

joey101
Light Poster
45 posts since Nov 2004
Reputation Points: 10
Solved Threads: 0
 

Hello everyone!
I want to use bash from python, however the os.system(command) seems to only act on one command at a time.

I want to use complete commands, also containing control flow statements, like If and While, and to call them from python.

something like this code in bash:

T1="foo"
T2="bar"
if [ "$T1" == "$T2" ]; then
echo even
else
echo not even
fi

I tried to use os.system and separate the commands with ';' , and it works only on simple one line commands, but not on control flow commands.

any suggestions?
thanks!

Avner .H.
Newbie Poster
18 posts since Aug 2005
Reputation Points: 10
Solved Threads: 0
 

T1="foo" T2="bar" if [ "$T1" == "$T2" ]; then echo even else echo not even fi

I tried to use os.system and separate the commands with ';' , and it works only on simple one line commands, but not on control flow commands.

any suggestions? thanks!

The os.system('') command should work fine... the important thing is that you use the proper one-line syntax for the bash shell. Here is an example copied from your list above:os.system('T1="foo"; T2="bar"; if [ "$T1" == "$T2" ]; then echo even; else echo not even; fi')

That should give you the output of:
not even
0

Just remember to put spaces in the right spots and semi-colons in the right spots... bash gets cranky otherwise.

A helpful hint on how to get this to work properly is to type what you want in regular new-line format into the shell, then look at "previous commands" (history)... if statements are re-formatted to one-line for easy access.

That Help At All?

akdom
Newbie Poster
1 post since Aug 2006
Reputation Points: 10
Solved Threads: 0
 

That help me a lot! Thanks...
I am new to linux - and to bash to - and I was'nt now what is wrong with things like ["$a"="$b"]. Now it works fine from bash and python too! ...Just 1 more question: how do I solve sudo paswword from python? Let say os.system('sudo cmd').Wat flag do I need and where I put the pass?

ovoid
Newbie Poster
1 post since May 2008
Reputation Points: 10
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You