我有两个脚本,例如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
答案 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
,然后通过method1
向PC2
发送一些信息,以使socket
必须在民意测验中注册。像epoll。也有很多不错的博客向您展示了如何通过Python使用它,例如this。如果您擅长method2
,那么多线程模式是等待触发事件发生的另一个好选择。
答案 2 :(得分:0)
似乎您正在两台PC之间建立一个message broker /共享任务队列。
如果您可以使用ssh在PC之间进行通信,建议您在每台计算机上设置simple HTTP server并通过curl将POST消息与数据一起发送到localhost:8000 /:script_name,或者与通过unix socket处理。