2016-06-14 12 views
0

Ich habe ein Python3-Skript, das andere Python3-Skripts mit subprocess.Popen aufruft.
Das erste Skript erstellt ein Python-Objekt, das vom zweiten Skript benötigt wird und einige Male mit demselben Objekt ausgeführt wird.Führen Sie Subprozess Python-Skript mit Argumenten

Im Moment sieht es wie folgt aus:

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

Jedoch habe ich zum subprocess Objekt die Python im ersten Skript erstellt übergeben möchten. Ist das möglich? Oder kann ich nur String-Argumente übergeben?

Danke.

Antwort

1

Args soll entweder eine Zeichenkette oder eine Folge von Zeichenketten sein wie die documentation. Wenn Sie jedoch ein Objekt übergeben möchten, könnten Sie das Objekt möglicherweise in JSON serialisieren und es dann in Ihrem zweiten Skript deserialisieren, um das ursprüngliche Objekt abzurufen. Sie können dann mit der zweiten Skript-Operationen

0

ich einen python3 Skript, das ruft andere python3 Skripte mit subprocess.Popen

autsch

Das erste Skript ein Python-Objekt erstellt benötigt gehen durch das zweite Skript, das ein paar Mal mit dem gleichen Objekt laufen wird.

autsch^2

Jedoch habe ich zum subprocess Objekt des Pythons im ersten Skript erstellt übergeben mag. Ist das möglich? Oder kann ich nur String-Argumente übergeben?

Sie können nur String-Argumente übergeben, aber Sie können das Objekt serialisieren, bevor Sie es übergeben.

Sie möchten mehr über das Problem erfahren, das Sie lösen möchten, damit wir eine gut strukturierte, wartbare Lösung entwickeln können?

Einfach zu zeigen, wie einfach es in Python ist auch so verdreht, Dinge zu tun :):

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)