我正在使用一些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
所以稍微解释一下,“BLAT”是我调用程序,所有的-flags是我想传递给blat程序的参数和最后三个语句也是我需要编程的参数,但他们实际上指定了程序读取/写入的文件。
有没有办法将参数值传递给shell命令,如果没有使用'subprocess.call',它们实际上是文件?当然,有一种简单的方法可以实现这一点,就像我初学者一样,我只是不知道。顺便说一下,我已经看过子流程文档,但作为新手我还是不太明白http://docs.python.org/2/library/subprocess.html#subprocess.call
谢谢!
是'blat'意味着接受文件名或手柄?我敢打赌,问题在于你正在将命令组件列表中的文件对象传递给'call',它只需要字符串。你在寻找'stdin'和'stdout' kwargs吗? –
是的,你的直觉是正确的。调用函数只会使用字符串。我不认为有可能做我想做的事情。我通过创建一个我需要的输入文件列表来解决问题,然后用索引查找(code is below as a new answer)将它们提供给call()。谢谢,西拉斯! – JayB