Я работаю с кодом на Python, который использует некоторые программы, доступные только из моего терминала Unix (ОС Windows 7, используя терминал шпатлевки). Я уже просмотрел множество статей, я знаю, что подобные вопросы заданы, но ничего не работает меня.Подпроцесс Python - переменные типы?
Это код
#written in Py 2.7
from subprocess import call
subject = open ('test_file1', 'r')
target =open ('test_file2', 'r')
output = open ('output_test.bla8', 'w')
call(['blat', '-prot', '-minScore=0', '-stepSize=5', '-repMatch=2253', '-minIdentity=0', '-out=blast8', subject, target, output])
subject.close()
target.close()
output.close()
Ошибка я получаю это:
TypeError: execv() arg 2 must contain only strings
Так немного объяснения, «блат» это программа, которую я зову, все -flags являются аргументы, которые я хочу передать в программу blat и последние три оператора, также являются аргументами, которые мне нужно получить, чтобы программа, но они на самом деле определяют файлы для программы для чтения/записи.
Есть ли способ передать значения аргумента команде оболочки, которая на самом деле является файлом, если не используется 'subprocess.call'? Конечно, есть простой способ добиться этого, что, как я начинаю, я просто не знаю. Кстати, я взглянул на документы подпроцесса, но как новичок я все еще не могу это получить http://docs.python.org/2/library/subprocess.html#subprocess.call
СПАСИБО !!!
ли blat' означало 'взять имена файлов или ручки? Моя ставка заключается в том, что вы передаете файловые объекты в списке компонентов команд для 'call' и ожидает только строки. Вы ищете «stdin» и «stdout» kwargs? –
Да, ваша догадка была правильной. Функция вызова принимает только строки. Я не думаю, что можно делать то, что я пытаюсь. Я столкнулся с проблемой, создав список необходимых мне входных файлов, а затем подав их на вызов() с индексированием (код ниже в качестве нового ответа). Спасибо, Сайлас! – JayB