2016-06-14 18 views
0

subprocess.Popenを使って他のpython3スクリプトを呼び出すpython3スクリプトがあります。
最初のスクリプトは、同じオブジェクトを使用して数回実行する2番目のスクリプトに必要なPythonオブジェクトを作成します。サブプロセスpythonスクリプトを引数付きで実行する

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

私はサブプロセスに最初のスクリプトで作成されたPythonオブジェクトを渡したいただし:

今のところはこのようになります。 これは可能ですか?または、文字列引数のみを渡すことはできますか?

ありがとうございました。

答えて

1

Argsは、documentationのように文字列か文字列のいずれかであると考えられます。しかし、オブジェクトを渡したい場合は、オブジェクトをJSONにシリアル化し、2番目のスクリプトで逆シリアル化して元のオブジェクトを取得することができます。あなたは、私はsubprocess.Popen

最初のスクリプトが必要なのpythonオブジェクトを作成し

痛い

を使用して他のpython3スクリプトを呼び出すのpython3スクリプトを持って

0

2番目のスクリプトの業務を進めること同じオブジェクトを使用して数回実行する第2のスクリプトによって実行されます。

痛い^ 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) 
関連する問題