2015-11-11 64 views
1

我真的是Pyhton世界的新手。我实际上在做音乐,我使用软件调用Ableton。
我在做的是为这个软件编写2个脚本。
实际上它们可以在Ableton GUI中选择。每个脚本都链接到一个硬件接口。这些脚本所做的是让我定制硬件接口控制软件的方式(Ableton)。 我的2脚本没问题,但运行良好,但是我希望能够从一个脚本发送命令到另一个脚本(以允许在第二个控制器按下按钮时在第一个控制器上执行操作)。
所以我有2个单独的文件夹与2脚本(我不能使用一个文件夹,因为Ableton谁必须独立运行和编译两个脚本)。 因此,让我们打电话给他们文件夹A文件夹B
在这两个文件夹中,我都有一个__init__.py和一个main_code.py文件
main_code.py文件看起来是这样的:Python 2.7从一个脚本传递给另一个脚本的方法

from __future__ import with_statement 
from _Framework.ControlSurface import ControlSurface 
import Live 
import time 

class main_code(ControlSurface): 

def __init__(self, c_instance): 
    ControlSurface.__init__(self, c_instance) 
    with self.component_guard():   
     self._suppress_send_midi = True 
     self.clip = self.selected_scene.clip_slots[self.selected_track_idx].clip 
     self._suppress_send_midi = False 


    @property 
    def selected_track(self): 
     return self.song().view.selected_track 

    @property 
    def selected_track_idx(self): 
     return self.tuple_idx(self.song().tracks, self.song().view.selected_track)   

    @property 
    def selected_scene(self): 
     return self.song().view.selected_scene 

    def tuple_idx(self, tuple, obj): 
     for i in xrange(0, len(tuple)): 
      if (tuple[i] == obj): 
       return i 
     return(False) 

正如你可以看到我用一些框架(ControlSurface)和ABLETON API(进口活)。 我想要做的就是将变量self.clip从一个脚本“发送”到另一个,以便它们都具有相同的“值” 对不起,我现在不再了,如果它是一种方法或什么有... 我的第一个想法之一是使用泡菜愚蠢self.clip在一个文件中,并将其加载在另一个,但是当我这样做时,我得到在福顿报告崩溃的错误:

File“ /Users/versonator/Jenkins/live/Projects/AppWebConnector/Resources/third_party/lib/pickle.py“,第1362行,转储

9250ms。 RemoteScriptError:文件“/Users/versonator/Jenkins/live/Projects/AppWebConnector/Resources/third_party/lib/pickle.py”,第224行,转储

9250 ms。 RemoteScriptError:文件“/Users/versonator/Jenkins/live/Projects/AppWebConnector/Resources/third_party/lib/pickle.py”,行306,保存

9251 ms。 RemoteScriptError:RuntimeError 9251 ms。 RemoteScriptError :: 9251 ms。 RemoteScriptError:“Clip.Clip”实例的酸洗未启用(http://www.boost.org/libs/python/doc/v2/pickle.html) 9251 ms。 RemoteScriptError:

其实我用泡菜是这样的:

 clip = self.clip 
     f = open('/Users/Louis/Desktop/test.pickle', 'wb') 
     pickle.dump(clip, f, -1)  
     f.close() 

即使我不是在所有的程序员,这看起来像一个真正的混乱,我希望有人可以帮我找一个其他的方式做什么我想或解决我的腌制方式!

+0

您可以尝试添加脚本,它将self.clip初始化为带有sys的sys路径; sys.path.append( '/路径/到/脚本/');在需要self.clip的脚本中。那么你应该能够导入脚本,它初始化self.clip并在另一个脚本中使用它。 – BigZ

+0

如果你有时间请给我一个非常简短的例子吗?感谢您的回答 ! – hardoon

+0

self.clip根据按钮更改,我按下硬件接口。你确定,第二个脚本会得到所有这些改变吗?我不知道该怎么做。再次感谢你的帮助。 – hardoon

回答

0

让我们假设你调用脚本B.py与Ableton公司这就需要self.clip从脚本A.py 在脚本B.py顶部这就需要self.clip写:

import sys 
sys.path.append('\path\to\script\A\') 
# You should now be able to import every class from script A 
# and use its methods and functions. 

例如:

B.py

from A import main_code 

mc = main_code(c_instance) # Don't know what c_instance is or where it comes from, 
          # but i guess you will :) 
mc.selected_track() 

...等等

也许您需要在脚本A所在的目录中创建一个名为__init__.py的文件,以便使该文件夹成为可由其他脚本导入的python软件包。

如果从A.py需要self.clip你可以这样做:

mc = main_code(c_instance) 
clip = mc.clip 

或者你可以使A.py函数返回self.clip:

A.py

class main__code(ControlSurface): 
    def __init__(self, c_instance): 
     ControlSurface.__init__(self, c_instance) 
     with self.component_guard():   
      self._suppress_send_midi = True 
      self.clip = self.selected_scene.clip_slots[self.selected_track_idx].clip 
      self._suppress_send_midi = False 

    ... 

    def getClip(self): 
     return self.clip 

注: 您需要检查是否self.clip在A.py改变,如果B.py.所以更新剪辑

希望这会有帮助

+0

感谢您的回答我现在就试试这个!你知道什么是在Mac OSX应用程序的全球路径? – hardoon

+0

不,对不起。我对mac不是很熟悉。 :/ – BigZ

相关问题