调用python代码显示执行结果

2024-09-30 02:16:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在显示代码的结果时遇到了问题,尽管我遵循了这里提供的许多答案。你知道吗

如何获得运行我编写的python脚本的结果。它从命令行获取一个目录作为输入,应该返回执行bwa索引脚本的索引文件,但我没有得到任何输出。这里是我的代码:

def bwaIndex(argv):
    input_dir = sys.argv[1]
    script = 'bwa index'
    for infile in glob.glob(os.path.join(input_dir,"*.fasta")):
        if infile.endswith('*.fasta'):
            subprocess.call(["script, infile"])


if __name__ == '__main__':
    bwaIndex(sys.argv)

我不确定我做错了什么,或者在某种程度上我是否是对的。你知道吗


Tags: 答案代码命令行脚本inputifdirsys
2条回答

subprocess.call的参数是一个参数列表,它不会进行任何分词或将其传递给shell(除非您指定shell=True,但这种方式容易出错,通常不建议这样做)。因此,每一个“单词”或每一件你想作为一个单独的论据处理的东西都应该是列表中它自己的项目。在本例中,需要3个参数bwa(要运行的可执行文件)、index(要运行bwa的命令)和要对其进行操作的文件,该文件存储在infile。因此,您可能需要执行以下操作:

def bwaIndex(input_dir):
    for infile in glob.glob(os.path.join(input_dir, "*.fasta")):
        subprocess.call(['bwa', 'index', infile])

if __name__ == '__main__':
    bwaIndex(sys.argv[1])

请注意,我将参数更改为bwaIndex作为目录,而不是未使用的对sys.argv的引用,而且由于glob只会扩展到以fasta结尾的内容,因此我放弃了该内部检查。然后我让您的参数subprocess.call成为您想要执行的标记。你知道吗

而不是使用子流程调用()您可以使用子流程.Popen()

from subprocess import Popen, PIPE
p = Popen(['program', 'arg1'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
output, err = p.communicate()
print output

有关子进程的详细信息,请参见here

相关问题 更多 >

    热门问题