python调用脚本产生的变量放入主脚本_从一个Python脚本向另一个脚本发送一个变量...

这篇博客讨论了如何在Python中使用`subprocess`模块来运行另一个Python脚本,确保使用与当前相同的Python版本。内容涉及到传递数据到子脚本,包括通过命令行参数和可能的管道方式。此外,还提到了在异步环境中执行子进程的挑战,建议使用线程并在必要时设置为守护线程。示例代码展示了如何在接收到消息时启动子进程并传递数据。
摘要由CSDN通过智能技术生成

要运行任何其他程序,只需使用subprocess模块中的函数。但有三个复杂性。在

首先,您需要运行另一个Python脚本,而不是二进制脚本。假设您希望使用运行它的同一版本的Python运行它,即使安装了多个Python。所以,您希望使用sys.executable作为程序。例如:subprocess.check_call([sys.executable, 'otherscript.py'])

其次,需要传递一些数据。对于可以在命令行中使用的少量可打印字符串数据,只需将它们作为参数传递:

^{pr2}$

然后,在另一个脚本中,只需查看sys.argv[1]来接收数据。在

如果要传递二进制数据或大量文本,则需要通过管道传递。最简单的方法就是通过。但我不认为这与此无关。在

第三,您尝试在异步网络客户机或服务器中执行此操作。所以,你不能只运行另一个脚本,直到它完成,除非你绝对确定它会很快完成。如果您的服务器框架能够将subprocesses集成到其中(Twisted是我唯一使用过的方法,但是可能还有其他方法),那就太好了。如果您可以将进程的stdout管道放入框架的事件循环中(基本上,如果您不关心Windows,并且您的框架有向reactor添加文件的方法),则可以伪造它。但不然,你就得用线了。在

我假设你不需要从另一个脚本得到任何结果,甚至不需要知道什么时候完成。如果那不是真的,那就更复杂了。在

综合起来:def on_message(self, headers, message):

print 'received a message %s' % message

obj = json.loads(message)

detectedimsi = obj["imsi"]

print detectedimsi

thread = threading.Thread(target=subprocess.call,

args=[[sys.executable, 'otherscript.py', detectedimsi]])

thread.daemon = True

thread.start()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值