一、前言
在开发过程中,遇到了这样一个情况:我们需要在脚本中通过 suprocess.call方法来启动另外一个脚本(脚本 B),当然啦,还得传递一些参数。在这些参数中,有一个需要传递的是一个实例化后的对象。我们知道,通过命令行的方式传递参数是基于字符格式的,也就是说脚本 B 只能接收到字符串格式的参数,那么如何接收启动脚本传递过来的实例化后的对象呢?
今天就来聊聊我使用的两种笨方法:使用 eval以及使用 pickle和 base64模块。
方法一:使用 eval
其实在代码中使用 eval应该不算是 good practice,不过既然可以暂时解决问题,何不拿来试试?其实使用这种方法并不能在命令行中传递实例化后的对象,只是将实例化的过程放在脚本 B 中进行了。
以下是启动脚本:
import subprocess
class Student(object):
def __init__(self):
self.name = 'Chris'
self.age = 30
def __str__(self):
return '\n'.join('{}:{}'.format(k_, v_) for k_, v_ in self.__dict__.items()
if not k_.startswith('_'))
def start_script():
# 我们把实例化的过程延迟
commands = ['python3', '/home/chris/Projects/Python/movi