471,337 Members | 1,407 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,337 software developers and data experts.

Saving parameters between Python applications?

I'm trying to do the following. I have a Python application that is
run:

python app1.py --location=c:\test1

What I want to do is save the location parameter, so I can then do (in
the same window):

python app2.py

And have app2.py automatically have access to the value of "location".

Now, the difficult part is, that in another window I want to do:

python app1.py --location=c:\test2
python app2.py

And have app2.py automatically get c:\test2 as the location. So the
two windows (consoles) are isolated from each other.

I thought I could use os.environ, but that doesn't save the variable
for applications that are run afterwards in the same window.

Any suggestions?

Thanks

Sep 16 '07 #1
14 1330
On 9/16/07, Stodge <st****@gmail.comwrote:
python app1.py --location=c:\test1
What I want to do is save the location parameter, so I can then do (in
the same window):
python app2.py
And have app2.py automatically have access to the value of "location".
Do app1.py to save a pickle of the value you want app2 to read.

--
Sebastián Bassi (セバスティアン). Diplomado en Ciencia y Tecnolog*a.
Curso Biologia molecular para programadores: http://tinyurl.com/2vv8w6
GPG Fingerprint: 9470 0980 620D ABFC BE63 A4A4 A3DE C97D 8422 D43D
Sep 16 '07 #2
Good idea, but I can't guarantee that the two scripts will be run from
the same directory - so where to store the pickle?

On Sep 16, 5:25 pm, "Sebastian Bassi" <sba...@clubdelarazon.org>
wrote:
On 9/16/07, Stodge <sto...@gmail.comwrote:
python app1.py --location=c:\test1
What I want to do is save the location parameter, so I can then do (in
the same window):
python app2.py
And have app2.py automatically have access to the value of "location".

Do app1.py to save a pickle of the value you want app2 to read.

--
Sebastin Bassi ( ). Diplomado en Ciencia y Tecnologa.
Curso Biologia molecular para programadores:http://tinyurl.com/2vv8w6
GPG Fingerprint: 9470 0980 620D ABFC BE63 A4A4 A3DE C97D 8422 D43D
Sep 17 '07 #3
On 9/17/07, Stodge <st****@gmail.comwrote:
Good idea, but I can't guarantee that the two scripts will be run from
the same directory - so where to store the pickle?
It doesn't matter if is the same directory or not, as long as both
programs has access to the pickle file (one program should have write
access and the other program should have at least read access).

--
Sebastián Bassi (セバスティアン). Diplomado en Ciencia y Tecnolog*a.
Curso Biologia molecular para programadores: http://tinyurl.com/2vv8w6
GPG Fingerprint: 9470 0980 620D ABFC BE63 A4A4 A3DE C97D 8422 D43D
Sep 17 '07 #4
Stodge a crit :
I'm trying to do the following. I have a Python application that is
run:

python app1.py --location=c:\test1

What I want to do is save the location parameter, so I can then do (in
the same window):

python app2.py

And have app2.py automatically have access to the value of "location".

Now, the difficult part is, that in another window I want to do:

python app1.py --location=c:\test2
python app2.py

And have app2.py automatically get c:\test2 as the location. So the
two windows (consoles) are isolated from each other.

I thought I could use os.environ, but that doesn't save the variable
for applications that are run afterwards in the same window.

Any suggestions?
May use simple file in known place:
$HOME/.myprefs
$HOME/.conf/myprefs

Or host specific configuration API:
WindowsRegistry HKEY_CURRENT_USER\Software\MySociety\MyApp\myprefs
See os.getenv, and _winreg Windows specific module.
See also standard ConfigParser module
Hope you know how to read/write files.

Sep 17 '07 #5
Stodge a crit :
I'm trying to do the following. I have a Python application that is
run:

python app1.py --location=c:\test1

What I want to do is save the location parameter, so I can then do (in
the same window):

python app2.py

And have app2.py automatically have access to the value of "location".

Now, the difficult part is, that in another window I want to do:

python app1.py --location=c:\test2
python app2.py

And have app2.py automatically get c:\test2 as the location. So the
two windows (consoles) are isolated from each other.

I thought I could use os.environ, but that doesn't save the variable
for applications that are run afterwards in the same window.

Any suggestions?
Yes : pass the same arg to both app1.py and app2.py !-)

Braindead, I know, but still the simplest solution.
Sep 17 '07 #6
You're probably right!

Thanks all. :)

On Sep 17, 10:15 am, Bruno Desthuilliers <bruno.
42.desthuilli...@wtf.websiteburo.oops.comwrote:
Stodge a crit :
I'm trying to do the following. I have a Python application that is
run:
python app1.py --location=c:\test1
What I want to do is save the location parameter, so I can then do (in
the same window):
python app2.py
And have app2.py automatically have access to the value of "location".
Now, the difficult part is, that in another window I want to do:
python app1.py --location=c:\test2
python app2.py
And have app2.py automatically get c:\test2 as the location. So the
two windows (consoles) are isolated from each other.
I thought I could use os.environ, but that doesn't save the variable
for applications that are run afterwards in the same window.
Any suggestions?

Yes : pass the same arg to both app1.py and app2.py !-)

Braindead, I know, but still the simplest solution.

Sep 17 '07 #7
On Sep 17, 6:39 am, Laurent Pointal
May use simple file in known place:
$HOME/.myprefs
$HOME/.conf/myprefs

Or host specific configuration API:
WindowsRegistry HKEY_CURRENT_USER\Software\MySociety\MyApp\myprefs

See os.getenv, and _winreg Windows specific module.
See also standard ConfigParser module

Also, os.path offers expanduser(). The following is reasonably
portable:

import os

user_home_dir = os.path.expanduser("~")
--
--Bryan

Sep 17 '07 #8
os.path.expanduser isn't an option; I need each console/window to
maintain different values which I wouldn't get from saving to a user's
home directory. Unless I used a different file for each console/window
but that just gets me into the same situation I'm already in. I think
the only option is to set environment variables using another script.
I'm really surprised and disapponited by this.

One option I thought of but haven't investigated, is the ability to
get the parent (i.e. console's) process id and use that to create a
file somewhere. Not sure if this is even possible.

On Sep 17, 4:29 pm, bryanjugglercryptograp...@yahoo.com wrote:
On Sep 17, 6:39 am, Laurent Pointal
May use simple file in known place:
$HOME/.myprefs
$HOME/.conf/myprefs
Or host specific configuration API:
WindowsRegistry HKEY_CURRENT_USER\Software\MySociety\MyApp\myprefs
See os.getenv, and _winreg Windows specific module.
See also standard ConfigParser module

Also, os.path offers expanduser(). The following is reasonably
portable:

import os

user_home_dir = os.path.expanduser("~")

--
--Bryan

Sep 18 '07 #9
Stodge a crit :
os.path.expanduser isn't an option; I need each console/window to
maintain different values which I wouldn't get from saving to a user's
home directory. Unless I used a different file for each console/window
but that just gets me into the same situation I'm already in. I think
the only option is to set environment variables using another script.
I'm really surprised and disapponited by this.
Note that it's *not* a Python issue. You'd have the same problem with
any other language.

Sep 18 '07 #10
Stodge wrote:
os.path.expanduser isn't an option; I need each console/window to
maintain different values which I wouldn't get from saving to a user's
home directory. Unless I used a different file for each console/window
but that just gets me into the same situation I'm already in. I think
the only option is to set environment variables using another script.
I'm really surprised and disapponited by this.
you can't do that either. It's the principle behind environment-vars that
you can't alter the ones of your parent process.

That's the reason why environment-changes must be done by using "source":
# source my_script

where my_script contains e.g.

export FOO="bar"
If you can have your user alter his/her .bashrc, you might consider creating
a environtment-variable in there that the subsequent script invocations
refer to. Like this:

# .bashrc
export SESSION=<create some unique name using e.g. date>

Then in the python-scripts you can use SESSION as a common prefix
into /tmp-residual files or such thing.

Diez
Sep 18 '07 #11
Stodge wrote:
os.path.expanduser isn't an option; I need each console/window to
maintain different values which I wouldn't get from saving to a user's
home directory. Unless I used a different file for each console/window
but that just gets me into the same situation I'm already in. I think
the only option is to set environment variables using another script.
I'm really surprised and disapponited by this.
That's a sign of your inexperience, then. As someone has already pointed
out, this is nothing to do with Python.

Under UNIX/Linux you could use the $$ variable to construct a filename
specific to a particular shell process and put it in the environment,
but I'm not aware of a similar feature in Windows. This is probably a
sign of *my* inexperience :-)
One option I thought of but haven't investigated, is the ability to
get the parent (i.e. console's) process id and use that to create a
file somewhere. Not sure if this is even possible.
You might be able to write a Python program to access it :-)

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden

Sorry, the dog ate my .sigline

Sep 18 '07 #12
I wrote a small C program in Linux and used setenv() from stdlib and
it modified the console's environment. I can also modify the console's
environment from a DOS batch file, so why not in Python?

Guess I'm inexperienced and I just don't get it. :)

On Sep 18, 11:48 am, Steve Holden <st...@holdenweb.comwrote:
Stodge wrote:
os.path.expanduser isn't an option; I need each console/window to
maintain different values which I wouldn't get from saving to a user's
home directory. Unless I used a different file for each console/window
but that just gets me into the same situation I'm already in. I think
the only option is to set environment variables using another script.
I'm really surprised and disapponited by this.

That's a sign of your inexperience, then. As someone has already pointed
out, this is nothing to do with Python.

Under UNIX/Linux you could use the $$ variable to construct a filename
specific to a particular shell process and put it in the environment,
but I'm not aware of a similar feature in Windows. This is probably a
sign of *my* inexperience :-)
One option I thought of but haven't investigated, is the ability to
get the parent (i.e. console's) process id and use that to create a
file somewhere. Not sure if this is even possible.

You might be able to write a Python program to access it :-)

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden

Sorry, the dog ate my .sigline

Sep 20 '07 #13
On 9/16/07, Stodge <st****@gmail.comwrote:
I'm trying to do the following. I have a Python application that is
run:

python app1.py --location=c:\test1

What I want to do is save the location parameter, so I can then do (in
the same window):

python app2.py

And have app2.py automatically have access to the value of "location".

Now, the difficult part is, that in another window I want to do:

python app1.py --location=c:\test2
python app2.py

And have app2.py automatically get c:\test2 as the location. So the
two windows (consoles) are isolated from each other.

I thought I could use os.environ, but that doesn't save the variable
for applications that are run afterwards in the same window.
Use a value based on your current tty. I don't know how to get this
value in Python but you could just shell 'tty' and grab the output.

Or, to get your parent process's pid, use os.getppid().

Then, use a temporary file whose name is based on the above info.
Sep 20 '07 #14
os.getppid() isn't cross platform. I don't think it works on Windows.
I think I'll just create a simple shell script (BAT or Bash) for each
platform as needed.

Thanks

On Sep 20, 3:17 pm, David <wizza...@gmail.comwrote:
On 9/16/07, Stodge <sto...@gmail.comwrote:
I'm trying to do the following. I have a Python application that is
run:
python app1.py --location=c:\test1
What I want to do is save the location parameter, so I can then do (in
the same window):
python app2.py
And have app2.py automatically have access to the value of "location".
Now, the difficult part is, that in another window I want to do:
python app1.py --location=c:\test2
python app2.py
And have app2.py automatically get c:\test2 as the location. So the
two windows (consoles) are isolated from each other.
I thought I could use os.environ, but that doesn't save the variable
for applications that are run afterwards in the same window.

Use a value based on your current tty. I don't know how to get this
value in Python but you could just shell 'tty' and grab the output.

Or, to get your parent process's pid, use os.getppid().

Then, use a temporary file whose name is based on the above info.

Oct 14 '07 #15

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by David Stockwell | last post: by
reply views Thread by Xah Lee | last post: by
9 posts views Thread by Wingot | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.