Python脚本触发另一个脚本中的方法

时间:2018-07-12 08:45:56

标签: python

我有两个脚本,例如PC1上的script1.py和PC2上的script2.py。现在,script1.py具有两种方法,如下所示。必须先完成PC1上的method1()才能执行PC2上的method2()。那么,如何在已经运行的PC2上触发script2.py的method2()?

我可以将script2.py拆分为两个不同的.py文件,即PC2上的method1.py和method2.py,并在PC1上的script1_method2()完成后调用method2.py,但是然后我需要将foo对象传递给它。也许我可以腌制foo对象并从文件中读取它?

有更好的方法吗?

注意:我可以使用paramiko ssh在PC1和PC2之间进行通信

 
def script1_method1():
    """
    This is on PC1
    get connection from PC2 script 2 and do some work
    """
    pass

def script1_method2():
    """
    This is on PC1
    work which needs some time
    only after this work is done, call PC2 script2
    """
    pass

def script2_method1():
    """
    This is on PC2
    create an object 'foo' which connects to PC1 script1
    return object 'foo' to main
    """
    pass



def script2_method2(foo):
    """
    This is on PC2
    get object 'foo' and do some work with it
    """
    pass

3 个答案:

答案 0 :(得分:1)

如果可以使用script2.py(例如,通过sshfs)挂载PC2目录,则可以将此目录添加到PYTHONPATH,然后编写一个简单程序:

  for(y=0; y<i; y++) {
    printf("%s\n", person[y].fname);
    printf("%s\n", person[y].lname);
    printf("%s\n", person[y].phoneNum);
  }

答案 1 :(得分:0)

这是一个经典的IPC问题。因为您已经在两台计算机之间运行了这些脚本,所以org.apache.tomcat.util.digester.Digester.startElement Begin event threw exception java.lang.ClassNotFoundException: org.apache.catalina.core.JasperListener at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 应该是一个不错的选择。然后您可以运行Socket,然后通过method1PC2发送一些信息,以使socket必须在民意测验中注册。像epoll。也有很多不错的博客向您展示了如何通过Python使用它,例如this。如果您擅长method2,那么多线程模式是等待触发事件发生的另一个好选择。

答案 2 :(得分:0)

似乎您正在两台PC之间建立一个message broker /共享任务队列。

如果您可以使用ssh在PC之间进行通信,建议您在每台计算机上设置simple HTTP server并通过curl将POST消息与数据一起发送到localhost:8000 /:script_name,或者与通过unix socket处理。