如何将python自我对象传递给另一个python脚本

鹰嘴豆

我有一个奇怪的要求,我需要使用子进程模块从python调用脚本,然后从脚本调用原始类的函数。我有这样的东西-

import subprocess
import textwrap
import sys
class caller:
  def call_script(self):
     script = textwrap.dedent("""\
          #! /usr/bin/env python
          import caller
          print ("Before the callback")
          caller().callback()
          print ("After the callback")
      """)
     subprocess.Popen(script, shell=True, executable=sys.executable())

   def callback(self):
      print("inside the callback")

当然,现在我意识到,将从脚本调用的回调不是执行脚本的同一对象的方法。有什么方法可以将self对象传递给脚本,或者有其他方法可以获取调用脚本的原始对象的回调方法?

鹰嘴豆

就像@knitti所建议的那样,脚本可以在完全不同的过程中运行,因此我通过组合信号,文件和全局变量解决了此问题。并不是说这是最优雅的解决方案,但它对我有用-

import subprocess, textwrap, os, signal
caller_object = None
def signal_handler(signum, frame):
   caller_object.callback()

comm_file = "/tmp/somefile"

class caller:
   def call_script(self):
     signal.signal(signal.SIGALRM, mockproc_callback)
     # Need to pass the process id to the script.
     with open(comm_file, 'w') as pipe:
        pipe.write("{0}".format(os.getpid()))

     # Also set the global object so that callback function could be called by handler
      global caller_object
      caller_object = self

     script = textwrap.dedent("""\
          #! /usr/bin/env python
          import caller, signal, os
          with open("{0}", "r") as pipe:
          # Read the pid of original process
          pid = pipe.read()
          print ("Before the callback")

          # Although its named kill, os.kill could be used to send all sort of signals to a process
          os.kill(int(pid), signal.SIGALRM)
          print ("After the callback")
      """.format(comm_file))
     subprocess.Popen(script, shell=True, executable=sys.executable())

   def callback(self):
      print("inside the callback")

我相信还有很多改进的余地。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过意图将BluetoothDevice对象传递给另一个活动

来自分类Dev

Perl:如何将ARGV参数传递给另一个脚本?

来自分类Dev

Python:如何将ARGV参数传递给另一个脚本?

来自分类Dev

如何将变量传递给另一个场景中的脚本

来自分类Dev

将当前类的对象传递给另一个类

来自分类Dev

jQuery如何将对象传递给另一个函数

来自分类Dev

如何将一个JSP的对象传递给另一个JSP?

来自分类Dev

为什么我无法将此JSON对象传递给另一个活动

来自分类Dev

如何将switch参数传递给另一个PowerShell脚本?

来自分类Dev

将Python对象传递给另一个Python进程

来自分类Dev

如何将包含列表的变量作为参数传递给另一个python脚本

来自分类Dev

如何将对象传递给方法然后传递给另一个方法

来自分类Dev

如何将编写的对象传递给另一个类的构造函数?

来自分类Dev

如何从另一个Python脚本将网站地址传递给SpiderClass

来自分类Dev

如何将具有字符串数据成员的类的对象传递给C ++中的另一个类

来自分类Dev

SwiftUI通过引用将类对象传递给另一个视图

来自分类Dev

将json对象传递给另一个html

来自分类Dev

如何将python列表动态传递给另一个python文件

来自分类Dev

将另一个类的对象传递给单例类

来自分类Dev

如何将参数传递给另一个脚本生成的脚本

来自分类Dev

C ++:如何将一个对象传递给另一个对象构造函数?

来自分类Dev

将一个类的对象传递给另一个类的方法

来自分类Dev

如何将对象传递给另一个模型的回调?

来自分类Dev

Nashorn将Java对象传递给另一个Java方法

来自分类Dev

将模板类的对象传递给另一个类的构造函数

来自分类Dev

将选定的对象传递给另一个活动

来自分类Dev

如何将 express.js 响应对象传递给另一个模块

来自分类Dev

将 $.getJSON 对象传递给另一个 ember 控制器

来自分类Dev

Python:如何将变量从一个 Python 脚本传递到另一个

Related 相关文章

  1. 1

    通过意图将BluetoothDevice对象传递给另一个活动

  2. 2

    Perl:如何将ARGV参数传递给另一个脚本?

  3. 3

    Python:如何将ARGV参数传递给另一个脚本?

  4. 4

    如何将变量传递给另一个场景中的脚本

  5. 5

    将当前类的对象传递给另一个类

  6. 6

    jQuery如何将对象传递给另一个函数

  7. 7

    如何将一个JSP的对象传递给另一个JSP?

  8. 8

    为什么我无法将此JSON对象传递给另一个活动

  9. 9

    如何将switch参数传递给另一个PowerShell脚本?

  10. 10

    将Python对象传递给另一个Python进程

  11. 11

    如何将包含列表的变量作为参数传递给另一个python脚本

  12. 12

    如何将对象传递给方法然后传递给另一个方法

  13. 13

    如何将编写的对象传递给另一个类的构造函数?

  14. 14

    如何从另一个Python脚本将网站地址传递给SpiderClass

  15. 15

    如何将具有字符串数据成员的类的对象传递给C ++中的另一个类

  16. 16

    SwiftUI通过引用将类对象传递给另一个视图

  17. 17

    将json对象传递给另一个html

  18. 18

    如何将python列表动态传递给另一个python文件

  19. 19

    将另一个类的对象传递给单例类

  20. 20

    如何将参数传递给另一个脚本生成的脚本

  21. 21

    C ++:如何将一个对象传递给另一个对象构造函数?

  22. 22

    将一个类的对象传递给另一个类的方法

  23. 23

    如何将对象传递给另一个模型的回调?

  24. 24

    Nashorn将Java对象传递给另一个Java方法

  25. 25

    将模板类的对象传递给另一个类的构造函数

  26. 26

    将选定的对象传递给另一个活动

  27. 27

    如何将 express.js 响应对象传递给另一个模块

  28. 28

    将 $.getJSON 对象传递给另一个 ember 控制器

  29. 29

    Python:如何将变量从一个 Python 脚本传递到另一个

热门标签

归档