How to use the same system shell all the time in python

Started by
6 comments, last by renega_666 11 years ago

Hi,

I need to run several shell commands from Python. How do I use all the time the same shell?

Because if I use system in such manner:


from os import system

system("set x=0") #setting a system variable
system("echo %x%") #it does not exist here anymore
 

after first use the defined variable does not exist anymore.

How to workaround this?

Thanks,

Advertisement

What happens if you call system once with a string containing newlines? If that works, build the complete string then execute it.

"Most people think, great God will come from the sky, take away everything, and make everybody feel high" - Bob Marley

after first use the defined variable does not exist anymore.

When you call os.system, a new child process with a new environment is created. See this discussion for more details: http://stackoverflow.com/questions/1506579/why-doesnt-os-systemset-foo-bar-work

A workaround would be to separate your shell commands with new lines (\n) or write a bash that you run from your python script using the subprocess module.

Thanks for answers.

Somehow this command with new line operator does not work, but one can join commands with & sign.

It works fine for me under Ubuntu 12.10, Python 2.7.3.

What is the output of the following script?


import os
print os.system("x=15\necho $x")

I have the following output:


15
0

If you are using Windows you might want to try \r\n instead of just \n for your newlines... perhaps that is the reason it doesn't work?

"Most people think, great God will come from the sky, take away everything, and make everybody feel high" - Bob Marley

As this what I am doing is a multiplatform installer I finally decided to use Batch/Shell files, so system command calls only a file which has everything inside. That's even better solution, than trying to concatenate all commands. It seems a bit more flexible now as one can put many scripts in a source directory and run them one by one.

Glad you found a solution that suits your needs.

May I ask you why you want to create a multiplatform installer? I ask this because it is usually advised to use the targeted system's package manager (Windows Installer on Windows, Debian and RPM on GNU/Linux, PyPi if you want to distribute a python package, and so on...)

This topic is closed to new replies.

Advertisement