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

## Recommended Posts

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,

##### Share on other sites

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

##### Share on other sites

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.

##### Share on other sites

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

##### Share on other sites

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

Edited by renega_666

##### Share on other sites

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?

##### Share on other sites

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.

Edited by Misery

##### Share on other sites

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...)

Edited by renega_666

## Create an account

Register a new account

• ### Forum Statistics

• Total Topics
628331
• Total Posts
2982113

• 22
• 9
• 9
• 13
• 11