我有一个python3脚本,使用subprocess.Popen
调用其他python3脚本。
第一个脚本创建第二个脚本所需的python对象,该脚本将使用同一个对象运行几次。
现在它看起来像这样:
for x in range(0,10):
pid2 = subprocess.Popen([sys.executable, "try2.py"])
但是我想将第一个脚本中创建的python对象传递给子进程。 这可能吗?或者我可以只传递字符串参数吗?
感谢。
答案 0 :(得分:1)
根据documentation,Args应该是字符串或字符串序列。但是如果你想传递一个对象,你可以将对象序列化为JSON,然后在第二个脚本中反序列化它以检索原始对象。然后,您可以继续第二个脚本的操作
答案 1 :(得分:0)
我有一个python3脚本,使用subprocess.Popen
调用其他python3脚本
哎哟
第一个脚本创建第二个脚本所需的python对象,该对象将使用同一个对象运行几次。
哎哟^ 2
但是我想将第一个脚本中创建的python对象传递给子进程。这可能吗?或者我可以只传递字符串参数吗?
您只能传递字符串参数,但可以在传递之前序列化该对象。
您介意分享有关您要解决的问题的更多信息,以便我们能够提出结构良好的可维护解决方案吗?
同样也证明了在python中做这么扭曲的事情是多么容易:):
python3:
try1.py:
import subprocess
import sys
import pickle
import base64
class X:
def __init__(self):
self.a = 2
a = X()
a.a = "foobar"
subprocess.call([sys.executable, "try2.py", base64.encodestring(pickle.dumps(a))])
try2.py:
import sys
import pickle
import base64
class X:
def __init__(self):
self.a = 2
x = pickle.loads(base64.decodestring(bytes(sys.argv[1], "ascii")))
print(x.a)