使用参数

时间:2016-06-14 09:40:15

标签: python subprocess popen

我有一个python3脚本,使用subprocess.Popen调用其他python3脚本。
第一个脚本创建第二个脚本所需的python对象,该脚本将使用同一个对象运行几次。

现在它看起来像这样:

for x in range(0,10):
    pid2 = subprocess.Popen([sys.executable, "try2.py"])

但是我想将第一个脚本中创建的python对象传递给子进程。 这可能吗?或者我可以只传递字符串参数吗?

感谢。

2 个答案:

答案 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)