2016-06-14 4 views
0

У меня есть сценарий python3, который вызывает другие скрипты python3, используя subprocess.Popen.
Первый скрипт создает объект python, необходимый второму скрипту, который будет работать несколько раз с использованием одного и того же объекта.Выполнение скрипта python подпроцесса с аргументами

Прямо сейчас это выглядит следующим образом:

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

Однако я хочу, чтобы перейти к подпроцессу объекту питона, созданный в первом сценарии. Возможно ли это? Или я могу передавать только аргументы строки?

Спасибо.

ответ

1

Аргс должен быть либо строкой, либо последовательностью строк в соответствии с documentation. Но если вы хотите передать объект, вы можете сериализовать объект в JSON, а затем десериализовать его обратно во втором скрипте для извлечения исходного объекта. После этого вы можете приступить к операции второго скрипта

0

У меня есть сценарий, который вызывает python3 другие сценарии Python3 с помощью subprocess.Popen

Уч

Первый скрипт создает объект питона, необходимый вторым скриптом, который будет работать несколько раз с использованием одного и того же объекта.

Уч^2

Однако я хочу, чтобы перейти к подпроцессу объекту питона, созданный в первом сценарии. Это возможно? Или я могу передавать только аргументы строки?

Вы можете передавать только аргументы строки, но вы можете сериализовать объект перед его передачей.

Вы не разделяете больше проблем, которые вы пытаетесь решить, чтобы мы могли найти хорошо структурированное поддерживаемое решение?

Просто тоже демонстрируют, как легко в питона сделать даже так скрученные вещи :):

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)