繁体   English   中英

在 python 子流程中添加循环

[英]Adding a loop within python sub-process

我需要帮助。 我有一个循环遍历目录中所有文件并运行子进程以在每个文件上使用命令行工具 (fimo) 的脚本,Fimo 是一种用于搜索特定子序列的 g.netic 序列的工具。 或图案,因为我的代码现在存在。 仅搜索 1 个主题(“/home/MA0074.1.meme”)。

我想更改此代码,使其循环遍历 1 个以上的主题。 我不确定如何将循环添加到子流程中,或者子流程中的变量如何工作(类似于另一个 {f}?),而且我在查找信息时遇到了麻烦。

其他主题可能是:

"/home/MA0796.1.meme"
"/home/MA0113.3.meme"

等等

这是现在存在的代码:

import subprocess
import sys
from subprocess import Popen, PIPE
import os
import os.path

os.chdir("/home/meme/src")
i = 0

path_of_the_directory= "/home/fastas_no_canonical"
for filename in os.listdir(path_of_the_directory):
    f = os.path.join(path_of_the_directory,filename)
    print(filename)
    i= i+1
    placeHolder = str(os.path.basename(filename))
    if os.path.isfile(f):
        result = subprocess.run(f'./fimo --oc "/home/fimos/%s" --verbosity 1 --thresh 1.0E-4 "/home/MA0074.1.meme" "{f}"'%(placeHolder), shell=True)
        print(f)

编辑:我在我的代码中添加了第二个 for 循环并修复了 f 字符串,如下所示:


i = 0

path_of_the_directory= "/home/fastas_no_canonical"
path_of_memes= "/home/test_memes"
for filename in os.listdir(path_of_the_directory):
    for meme in os.listdir(path_of_memes):
        f = os.path.join(path_of_the_directory,filename)
        m = os.path.join(path_of_memes,meme)
        i= i+1
        if os.path.isfile(f):
            result = subprocess.run(f'./fimo --oc "/home/test_memes/junk/{filename}/{meme}" --verbosity 1 --thresh 1.0E-4 "{m}" "{f}"', shell=True)
            print(f)
            print(m)

它正在工作,但仅适用于第一个文件。 output 包含一个文件夹,其中包含每个主题搜索第一个输入文件的数据,但随后冻结。 我用 print(f) 和 print(m) 检查了文件名是否正确,所以我可以这样判断它在第一个文件后冻结了。

有没有人在我的循环中看到可能导致此问题的错误? 我需要另一个迭代器吗?

我不确定如何将循环添加到子流程中,或者子流程中的变量如何工作(类似于另一个 {f}?)

您在这里有一些正确的想法,但这是不正确的思考方式。 您不会“在子流程中”创建变量。 相反,您的 python 代码中有一个变量,用于存储主题的路径。 您将该变量中的名称添加到传递给subprocess.run()的字符串中。 您甚至可以创建一个循环来遍历这些路径的列表。 在伪代码中,它可能看起来像这样:

for each dna sequence file
   for each motif
       search the dna sequence for the motif

作为一般规则,以这种方式用文字描述解决问题的步骤是一个很好的起点。 我将留给读者将其翻译成代码。

在旁注中,要么使用f''要么''%() ,但不能同时使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM