Sign in to follow this  
Misery

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 this post


Link to post
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 this post


Link to post
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 this post


Link to post
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 this post


Link to post
Share on other sites

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

Edited by renega_666

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this