2015-03-06 3 views
1

Я делаю сценарий, чтобы сфотографировать и записать их в папку, созданную/имени с «данными & времени»проход питон вар колотить

Я сделал эту часть, чтобы создать каталог и сделать фотографии

pathtoscript = "/home/pi/python-scripts" 
current_time = time.localtime()[0:6] 
dirfmt = "%4d-%02d-%02d-%02d-%02d-%02d" 
dirpath = os.path.join(pathtoscript , dirfmt) 
dirname = dirpath % current_time[0:6] #dirname created with date and time 
os.mkdir(dirname) #mkdir 
pictureName = dirname + "/image%02d.jpg" #path+name of pictures 

camera.capture_sequence([pictureName % i for i in range(9)]) 

Затем я хотел бы передать dirname в сценарий bash (picturesToServer), который загружает изображения на сервер. Как я могу это сделать?

cmd = '/home/pi/python-scripts/picturesToServer >/dev/null 2>&1 &' 
call ([cmd], shell=True) 

Возможно, я мог бы остаться в сценарии python scp изображения на сервер? У меня есть ssh-agent с набором парафраза (ssh-add mykey).

ответ

3

Поместите переменный в окружающей среде (она будет доступна в качестве обычного переменного Баша в сценарии Баша, например, как VAR_NAME в примере ниже), заменив ваш call с:

import subprocess  
p = subprocess.Popen(cmd, shell=True, env={"VAR_NAME": dirname}) 

или передать его как позиционный аргумент (она будет доступна в $1 в сценарии), заменив ваши cmd с:

cmd = '/home/pi/python-scripts/picturesToServer >/dev/null 2>&1 "{0}" &'.format(dirname) 

как примечание стороны, считает не, используя shell = True, когда вы вызываете подпроцесс. Использование shell = True является плохой идеей для a lot of reasons that are documented in the Python docs

Смежные вопросы