首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python2.7将方法从一个脚本传递到另一个脚本

Python2.7将方法从一个脚本传递到另一个脚本
EN

Stack Overflow用户
提问于 2015-11-11 13:57:21
回答 1查看 151关注 0票数 1

我对Pyhton世界很陌生。我实际上在做音乐,我用了一个叫Ableton的软件。

我所做的是为这个软件编写两个脚本。

事实上,它们在Ableton GUI中是可选择的。每个脚本都链接到一个硬件接口。这些脚本所做的是允许我定制硬件接口控制软件的方式(Ableton)。我的2脚本很好,但是我希望能够从一个脚本发送订单到另一个脚本(允许在第二个控制器的按钮被按下时在第一个控制器上执行一个操作)。

所以我有2个独立的文件夹和2个脚本(我不能同时使用一个文件夹,因为Ableton必须独立运行和压缩这两个脚本)。让我们称它们为文件夹A、文件夹B

在这两个文件夹中,我都有一个__init__.py和一个main_code.py文件

main_code.py文件如下所示:

代码语言:javascript
复制
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 (导入Live)。我想要做的是“发送”变量self.clip从一个脚本到另一个脚本,以便他们都有相同的“值”对不起,但我现在不再是一个方法或任何事情。我的第一个想法是在一个文件中使用泡菜来哑self.clip,然后在另一个文件中加载它,但是当我这样做时,我得到了ableton报告崩溃中的错误:

文件"/Users/versonator/Jenkins/live/Projects/AppWebConnector/Resources/third_party/lib/pickle.py",第1362行,转储

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

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

9251 ms.RemoteScriptError: RuntimeError 9251 ms.RemoteScriptError::9251 ms。RemoteScriptError:未启用(http://www.boost.org/libs/python/doc/v2/pickle.html) 9251 ms对"Clip.Clip“实例进行筛选。RemoteScriptError:

实际上我用的是像这样的泡菜:

代码语言:javascript
复制
        clip = self.clip
        f = open('/Users/Louis/Desktop/test.pickle', 'wb')  
        pickle.dump(clip, f, -1)       
        f.close()  

甚至我根本不是一个程序员,这看起来像一个真正的混乱,我希望有人能帮助我找到另一种方式来做我想做的,或解决我的泡菜方式!

EN

回答 1

Stack Overflow用户

发布于 2015-11-11 16:59:16

让我们假设您使用Ableton调用脚本B.py,它需要从脚本A.py的脚本A.py到脚本B.py的顶部,后者需要self.clip编写:

代码语言:javascript
复制
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

代码语言:javascript
复制
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包。

如果您需要来自self.clip的A.py,您可以执行如下操作:

代码语言:javascript
复制
mc = main_code(c_instance)
clip = mc.clip

或者您可以在A.py中创建一个函数,该函数返回self.clip:

A.py

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33652099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档