Питон и подпроцесс
-
06-09-2019 - |
Вопрос
Это для сценария, над которым я работаю. Он должен запустить файл .exe для цикла ниже. (Кстати, не уверен, видно ли это, но для EL в ('90', '52.6223', ...) находится за пределами цикла и делает вложенную петлю с остальными) Я не уверен, является ли упорядочение правильным или Что нет. Кроме того, когда файл .exe запускается, он выплевывает кое -что, и мне нужна определенная линия, напечатанная на экране (следовательно, где вы видите Appecificlinfe = ...). Любые полезные ответы были бы отличными!
for el in ('90.','52.62263.','26.5651.','10.8123.'):
if el == '90.':
z = ('0.')
elif el == '52.62263.':
z = ('0.', '72.', '144.', '216.', '288.')
elif el == '26.5651':
z = ('324.', '36.', '108.', '180.', '252.')
else el == '10.8123':
z = ('288.', '0.', '72.', '144.', '216.')
for az in z:
comstring = os.path.join('Path where .exe file is')
comstring = os.path.normpath(comstring)
comstring = '"' + comstring + '"'
comstringfull = comstring + ' -el ' + str(el) + ' -n ' + str(z)
print 'The python program is running this command with the shell:'
print comstring + '\n'
process = Popen(comstring,shell=True,stderr=STDOUT,stdout=PIPE)
outputstring = myprocesscommunicate()
print 'The command shell returned the following back to python:'
print outputstring[0]
AspecificLine=linecache.getline(' ??filename?? ', # ??
sys.stderr.write('az', 'el', 'AREA' ) # ??
Решение
С использованием shell=True
неправильно, потому что этот бездумный вызывает оболочку.
Вместо этого сделайте это:
for el in ('90.','52.62263.','26.5651.','10.8123.'):
if el == '90.':
z = ('0.')
elif el == '52.62263.':
z = ('0.', '72.', '144.', '216.', '288.')
elif el == '26.5651':
z = ('324.', '36.', '108.', '180.', '252.')
else el == '10.8123':
z = ('288.', '0.', '72.', '144.', '216.')
for az in z:
exepath = os.path.join('Path where .exe file is')
exepath = os.path.normpath(comstring)
cmd = [exepath, '-el', str(el), '-n', str(z)]
print 'The python program is running this command:'
print cmd
process = Popen(cmd, stderr=STDOUT, stdout=PIPE)
outputstring = process.communicate()[0]
print 'The command returned the following back to python:'
print outputstring
outputlist = outputstring.splitlines()
AspecificLine = outputlist[22] # get some specific line. 23?
print AspecificLine
Не связан с StackOverflow