2013-04-18 3 views
0

Я начинаю программировать на Python, я хочу передать сложный объект (словарь Python или объект класса) в качестве аргумента скрипту python с использованием командной строки (cmd). Я вижу, что sys.argv получает только строковые параметры.Передайте сложный объект скрипту python в командной строке

Вот пример того, что я хочу:

class point(object): 
    def __init__(self,x,y): 
     self.__x=x 
     self.__y=y 
p=point(4,8) 
import os 
os.system('""xxxxxx.exe" "-s" "../create_scenario.py" "'+ p +'""') 

xxxxxx.exe это программа, которая принимает для запуска питона скрипт с опцией -s. Спасибо за все!!!

+6

К сожалению, мы не делаем * срочный * здесь. Для получения критически важных ответов, пожалуйста, нанять консультанта. –

+1

'os.system' действительно плохо. –

+1

Ваш единственный вариант - сохранить его в файле. На стороне примечание: использование '__x' предназначено для обработки имени, которое, я уверен, вам не нужно в классе' point'. Возможно, вам нужна была приватная переменная '_x', если у вас есть функции getter и setter/property, но в остальном просто оставьте ее как' self.x' – jamylak

ответ

0

Вы можете использовать eval:

my_dict = eval(sys.argv[1]) 
print(my_dict) 

Comand приглашение:

$ my_script.py {1:2} 
$ {1: 2} 

Но что вы хотите сделать, это не рекомендуется (see this post). Вам следует избегать этого и хранить ваши данные в файле (например, JSON).

+0

Спасибо. Но как использовать exec? – user2294884

+0

Я внес небольшие изменения в свой пост. –

+1

Существуют лучшие альтернативы, чем 'eval'. Например, использование JSON. –

1

Вы можете попробовать сериализовать \ deserialize в \ из строки, используя модуль рассола. Ищите dumps и loads