Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
global variable issue on linux
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  11 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Xavier Lapointe  
View profile  
 More options May 11 2012, 9:11 pm
From: Xavier Lapointe <xl.mailingl...@gmail.com>
Date: Fri, 11 May 2012 21:11:30 -0400
Local: Fri, May 11 2012 9:11 pm
Subject: [Python] global variable issue on linux

Hey guys,

This one really surprised me. I tend to avoid global variable in Softimage
plugins as much as I can, but sometimes it might be convenient.

So basically, I wanted to use a global variable ( simple Python Dictionary
) to keep some stuff in reference while interacting with a PPG. I remember
clearly that it was working well under Windows, so
I assume this is a python 2.5 Linux issue (if this is an issue - please
tell me if this is normal under Soft with python 2.5).

Here's basically what I was trying to do:

[imports ....]

> # Global Scope
> LAST_SELECTION = {
>     'project': {},
>     'category': '',
>     'entities': [],
> }

> def CustomCommand_Execute():
>     global LAST_SELECTION
>     [Do some modifications to LAST_SELECTION]

Following this pattern:

   - Prompt the PPG
   - Interact with the UI
   - The custom command is fired - do some modifications to LAST_SELECTION
   - hit another PPG UI
   - Hell the LAST_SELECTION global is back to the inital value!

I've been tracing the LAST_SELECTION variable with id(), and it's changing
every time I interact with the UI; showing clearly that there is something
nasty going on under the hood (?)

Any idea to get this working?

Alan mentioned the Application.SetGlobal/Application.GetGlobal functions
... but still, this should be working natively, isn't?

Thanks!

--
Xavier


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Xavier Lapointe  
View profile  
 More options May 11 2012, 9:13 pm
From: Xavier Lapointe <xl.mailingl...@gmail.com>
Date: Fri, 11 May 2012 21:13:35 -0400
Local: Fri, May 11 2012 9:13 pm
Subject: Re: [Python] global variable issue on linux

hit another PPG UI Item ***

... All happening under the same Property page.

2012/5/11 Xavier Lapointe <xl.mailingl...@gmail.com>

--
Xavier

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Matt Lind  
View profile  
 More options May 11 2012, 9:18 pm
From: Matt Lind <ml...@carbinestudios.com>
Date: Sat, 12 May 2012 02:18:28 +0100
Local: Fri, May 11 2012 9:18 pm
Subject: RE: [Python] global variable issue on linux

My experience with global variables in scripting is softimage treats them like static declared variables from C/C++.   The variable is initialized once, then cached for all future invocations of the script during the user  session.  They are not de-referenced when the script terminates/completes.

This mainly applies to scripts run from the script editor directly.  Global variables inside of self installing plugins should work as expected.

Matt

From: softimage-boun...@listproc.autodesk.com [mailto:softimage-boun...@listproc.autodesk.com] On Behalf Of Xavier Lapointe
Sent: Friday, May 11, 2012 6:12 PM
To: softim...@listproc.autodesk.com
Subject: [Python] global variable issue on linux

Hey guys,

This one really surprised me. I tend to avoid global variable in Softimage plugins as much as I can, but sometimes it might be convenient.

So basically, I wanted to use a global variable ( simple Python Dictionary ) to keep some stuff in reference while interacting with a PPG. I remember clearly that it was working well under Windows, so
I assume this is a python 2.5 Linux issue (if this is an issue - please tell me if this is normal under Soft with python 2.5).

Here's basically what I was trying to do:

[imports ....]
# Global Scope
LAST_SELECTION = {
    'project': {},
    'category': '',
    'entities': [],

}

def CustomCommand_Execute():
    global LAST_SELECTION
    [Do some modifications to LAST_SELECTION]

Following this pattern:

 *   Prompt the PPG
 *   Interact with the UI
 *   The custom command is fired - do some modifications to LAST_SELECTION
 *   hit another PPG UI
 *   Hell the LAST_SELECTION global is back to the inital value!
I've been tracing the LAST_SELECTION variable with id(), and it's changing every time I interact with the UI; showing clearly that there is something nasty going on under the hood (?)

Any idea to get this working?

Alan mentioned the Application.SetGlobal/Application.GetGlobal functions ... but still, this should be working natively, isn't?

Thanks!

--
Xavier


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Alok Gandhi  
View profile  
 More options May 11 2012, 9:20 pm
From: Alok Gandhi <alok.gandhi2...@gmail.com>
Date: Fri, 11 May 2012 21:20:09 -0400
Local: Fri, May 11 2012 9:20 pm
Subject: Re: [Python] global variable issue on linux

I am not sure whether this works under windows as well, the plugin script
can get refreshed and all your global variables will be re-initialized. The
only good approaches that I have been using is to store the varaibles in
UIITems lists. This works well for the 3D com objects as well. Another idea
would be to pass on objects returning through a safe array from the
commands itself.

On Fri, May 11, 2012 at 9:13 PM, Xavier Lapointe
<xl.mailingl...@gmail.com>wrote:

--

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Xavier Lapointe  
View profile  
 More options May 11 2012, 9:24 pm
From: Xavier Lapointe <xl.mailingl...@gmail.com>
Date: Fri, 11 May 2012 21:24:13 -0400
Local: Fri, May 11 2012 9:24 pm
Subject: Re: [Python] global variable issue on linux

Hm, yes I could store it in a parameter or another way ... just this feels
hacky to get something basic done (granted no refresh happend during the
plugin execution).

This should work, like Matt mentioned :/

Oh well.

2012/5/11 Alok Gandhi <alok.gandhi2...@gmail.com>

--
Xavier

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Alok Gandhi  
View profile  
 More options May 11 2012, 9:33 pm
From: Alok Gandhi <alok.gandhi2...@gmail.com>
Date: Fri, 11 May 2012 21:33:32 -0400
Local: Fri, May 11 2012 9:33 pm
Subject: Re: [Python] global variable issue on linux

Yes if PPG is not getting refreshed then this seems weird. The only thing
that comes to mind is maybe the custom command execution is making things
go wrong. What if you use a function declared inside the plugin instead of
calling the custom command ? or maybe the custom command should be
implemented in the same plugin as the PPG, this does not make sense but is
worth a try.

On Fri, May 11, 2012 at 9:24 PM, Xavier Lapointe
<xl.mailingl...@gmail.com>wrote:

--

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Xavier Lapointe  
View profile  
 More options May 11 2012, 9:37 pm
From: Xavier Lapointe <xl.mailingl...@gmail.com>
Date: Fri, 11 May 2012 21:37:15 -0400
Local: Fri, May 11 2012 9:37 pm
Subject: Re: [Python] global variable issue on linux

I'll add some context:

   - everything lives in the same plugin
   - I tried storing it in a container coming from an imported module
   - tried accessing and setting the global variable directly in the
   globals() dictionary
   - Grumble Gumble.

2012/5/11 Alok Gandhi <alok.gandhi2...@gmail.com>

--
Xavier

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Alok Gandhi  
View profile  
 More options May 11 2012, 9:45 pm
From: Alok Gandhi <alok.gandhi2...@gmail.com>
Date: Fri, 11 May 2012 21:45:49 -0400
Local: Fri, May 11 2012 9:45 pm
Subject: Re: [Python] global variable issue on linux

One last thing, I checked one plugin where this works, of course in
windows, but in my code I do not use 'global ' keyword when accesing the
global dict. Something like this:
globalDict = {}

def _setGlobalDict(inObj=None, meshData=None):
    if inObj:
        globalDict['obj'] = inObj # no use of 'global' here.

    if meshData:
        globalDict['data'] = meshData

    return True

and then I call _setGlobalDict() wherever I need to.

On Fri, May 11, 2012 at 9:37 PM, Xavier Lapointe
<xl.mailingl...@gmail.com>wrote:

--

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Xavier Lapointe  
View profile  
 More options May 11 2012, 10:15 pm
From: Xavier Lapointe <xl.mailingl...@gmail.com>
Date: Fri, 11 May 2012 22:15:57 -0400
Local: Fri, May 11 2012 10:15 pm
Subject: Re: [Python] global variable issue on linux

Tried your solution but could not get it to work :(

Found a way, but I would need to understand the internal mechanism to
reproduce it more cleanly.

from win32com.client import constants

> constants.__dicts__.append({'PLUGIN_GLOBAL_SCOPE': None,'project':
> {},'category': '','entities': []})
> container = [d for d in constants.__dicts__ if 'PLUGIN_GLOBAL_SCOPE' in
> d][0]

Far from being ideal ...

2012/5/11 Alok Gandhi <alok.gandhi2...@gmail.com>

--
Xavier

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Alan Fregtman  
View profile  
 More options May 12 2012, 12:48 am
From: Alan Fregtman <alan.fregt...@gmail.com>
Date: Sat, 12 May 2012 00:48:26 -0400
Local: Sat, May 12 2012 12:48 am
Subject: Re: [Python] global variable issue on linux

Makes one wonder if that's why Application.SetGlobal() exists. =p lol

On Fri, May 11, 2012 at 10:15 PM, Xavier Lapointe
<xl.mailingl...@gmail.com>wrote:


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Aloys Baillet  
View profile  
 More options May 19 2012, 2:23 am
From: Aloys Baillet <aloys.bail...@gmail.com>
Date: Sat, 19 May 2012 16:23:22 +1000
Local: Sat, May 19 2012 2:23 am
Subject: Re: [Python] global variable issue on linux

Sorry a bit late in the thread, but global variables don't work in Python
plugins, as XSI fairly often re-executes the plugin code, especially when
dealing with PPG.
Not sure why it's doing this, but the consequence is that you just can't
rely on those as you would in a regular module, and that's a good reason to
prefer coding python in modules than in plugins.
I think there is a way to make global work though, if you do something like
this:

if 'MYGLOBAL' not in globals():
    global MYGLOBAL
    MYGLOBAL = 'MY_GLOBAL_DEFAULT_VALUE'

Cheers,

Aloys

On Sat, May 12, 2012 at 2:48 PM, Alan Fregtman <alan.fregt...@gmail.com>wrote:

--
Aloys Baillet
Lead Software Developer
Research & Development - Animal Logic
--

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »