Python subprocess

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Flo89
User
Beiträge: 9
Registriert: Donnerstag 3. September 2015, 19:51

Hi Leute,

ich habe folgende Bitte. Der obere Teil klappt einwandfrei (run maketemplatedb script). Im unteren Teil bekomme ich folgende Fehlermeldung (s. unter dem Code).
Ich bin mir nicht sicher wie ich das lösen kann. Hat einer von euch eine Idee ?

Code: Alles auswählen


#!~/Desktop/Python-2.7
# coding: utf8

import os
import subprocess
 
 
def open_source_tools_KmerFinder():
   
    base_path = '/mnt/vault/tmp/until_2016_01_01/florian'
    python27_path = '/home/falsheim/Desktop/Python-2.7/' 
 
    # paths to the folders 
    open_KmerFinder = os.path.join(base_path, 'KmerFinder/genomicepidemiology-kmerdb-077ba38a546a') 
    trimmed_reads_path = os.path.join(base_path,'trimmed_seq_salmonella_normal_20percentage')

    open_python27 = os.path.join(python27_path, 'python') 		    
 

   # run maketemplatedb python script (Kmer Finder 2.0)
   
    combine_ref = os.path.join(open_KmerFinder,'Salmonella_subset.fa') 		 
    cmd = ([open_python27, 'maketemplatedb.py', '-i', combine_ref , '-x', '"ATGAC"', '-k', '16', '-o', 'batch.ATGAC'])
    print " ".join(cmd)
    p = subprocess.Popen(cmd)
    out, err = p.communicate()
    print out
    print err 				
        
	
   # run findtemplatedb python script (Kmer Finder 2.0)
    for trim in os.listdir(trimmed_reads_path,trim):
        combine_trimmed_reads = os.path.join(trimmed_reads_path,trim)
        with open(trim + '.xls', 'w') as fout:
	    cmd = ([open_python27 ,'findtemplatedb.py', '-i', combine_trimmed_reads, '-t', 'batch.ATGAC', '-x', '"ATGAC"'])
	    print " ".join(cmd)
            p = subprocess.Popen(cmd, stdout = fout)
	    out, err = p.communicate()
	    print out
	    print err	


open_source_tools_KmerFinder()

`
Fehlermeldung:

[falsheimer@thirty-two genomicepidemiology-kmerdb-077ba38a546a]$ python open_source_tools_KmerFinder.py
/home/falsheim/Desktop/Python-2.7/python maketemplatedb.py -i /mnt/vault/tmp/until_2016_01_01/florian/KmerFinder/genomicepidemiology-kmerdb-077ba38a546a/Salmonella_subset.fa -x "ATGAC" -k 16 -o batch.ATGAC
Traceback (most recent call last):
File "open_source_tools_KmerFinder.py", line 45, in <module>
open_source_tools_KmerFinder()
File "open_source_tools_KmerFinder.py", line 25, in open_source_tools_KmerFinder
p = subprocess.Popen(cmd)
File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1234, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory



Danke schonmal.

VG Flo
BlackJack

Was ist denn bei Dir der obere und was der untere Teil? Es gibt offensichtlich keine Datei ``/home/falsheim/Desktop/Python-2.7/python`` und das fällt auch schon beim ersten `subprocess.Popen()`-Aufruf in Zeile 25 (26 im Beitrag) auf die Nase und nicht erst bei dem `subprocess.Popen()`-Aufruf in der Schleife weiter unten.
Flo89
User
Beiträge: 9
Registriert: Donnerstag 3. September 2015, 19:51

Der untere Teil beginnt ab # run findtemplatedb python script (Kmer Finder 2.0).

Einen Fehler konnte ich entdecken und habe ihn korrigiert (kleiner Fehler im Pfad !)

Wenn ich den unteren Teil auskommentiere funktioniert das Skript einwandfrei. D.h. ich bekomme keine Fehlermeldung
und das Skript tut das was es tun soll :)


das hier ist jedoch immer noch meine Fehlermeldung (bezogen auf den unteren Teil):

Traceback (most recent call last):
File "open_source_tools_KmerFinder.py", line 45, in <module>
open_source_tools_KmerFinder()
File "open_source_tools_KmerFinder.py", line 33, in open_source_tools_KmerFinder
for trim in os.listdir(trimmed_reads_path,trim):
UnboundLocalError: local variable 'trim' referenced before assignment
BlackJack

@Flo89: Die Meldung ist doch eigentlich auch sehr eindeutig. Wo definierst Du `trim` denn bevor Du es dort verwendest?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@Flo89: trim ist nicht definiert. Zudem erwartet os.listdir auch keine zwei Argumente. Die Zusätzlichen Klammern um die cmd-Listen irritieren mich. Das "ATGAC" muß tatsächlich in Anführungszeichen übergeben werden? Und findtemplatedb.py liefert eine xls-Datei nach stdout zurück? Dann sollte die Datei auch zum binären Schreiben geöffnet werden.
Antworten