[Perl] Programm mit Command line Befehl ausführen

Jacka

Erfahrenes Mitglied
Hallöchen!

Ich habe im Internet eine tolle Anleitung für das Erstellen einer MySQL-DB gestützen Online Struktursuche gefunden, die ich gerne mal ausprobieren wollte.
Alle chemischen Strukturen für die Datnebank müssen in einem bestimmten Format vorliegen (s.g. *.mol Files). Mit Hilfe eines Programmes "Checkmol.exe" werden diese Strukturfiles in einen bestimmten Zahlencode konvertiert, der dann in eine MySQL Datenbank eingetragen werden soll. Checkmol wird über Command line Befehle gesteuert (Checkmol <Option> <Filename>) z.B. so Checkmol -X 00001.mol
Da man meistens eine sehr große Anzahl an chemischen Struktruren hat (> 100.000), würde das händische Konvertieren und Eintragen in die DB ewig dauern. Daher wurden in dem Beispiel Perl-Skripte benutzt. Mit perl habe ich bis jetzt noch nichts gemacht gehabt, dazu kommt, dass die Beispiele für ein Linux-System ausgelegt sind. Der Perl-Code sieht recht verständlich aus, sodass ich es zumindest schon einmal geschafft habe, das das Skript die DB-Tabellen anlegt, nur funktioniert der Befehlsdurchlauf mit den Command Line Befehlen nicht und er kann dadurch die richtigen Werte nicht eintragen.

Daher meine Frage:
Wie führt man cmd.exe aus und übergibt Behfehle?
Wie bekommt man die Ausgabe wieder in eine Variable?

Das größte Problem scheinen immer die Programmpfade zu sein, gebe ich diese jedoch ein, bekomme ich Fehlermeldungen.

Hier mal ein Auschnitt aus dem Original Code:

Code:
use DBI();
$user = "moldb-admin";
$password = "topsecret";

$cmd = "#!/bin/sh
cd /data/htdocs/moldb/molfiles
for i in [0-9][0-9][0-9][0-9][0-9].mol 
do
  mol_id=`echo \$i |sed -e s/\.mol//g`
  echo -n \${mol_id}\:
  /usr/local/bin/checkmol -X \$i
done
";

open (INFILE, "$cmd |") || die ("cannot open input file!");
my $dbh = DBI->connect("DBI:mysql:database=moldb;host=localhost",
                       $user, $password,
                       {'RaiseError' => 1});

Link zur Anleitung: Uni Wien

Bin für jeden Hinweis dankbar!

Viele Grüße,
Jacka
 
Zuletzt bearbeitet:
Ganz so einfach wird das nicht, weil unter Windows einige Programme (z.B. das sed) nicht vorhanden ist.

Du solltest Dir genauer anschauen was gemacht wird und dann die Funktionalität in Perl nachprogrammieren.

So wie es für mich aussieht, sollte es ungefähr so gehen:
Code:
#!/usr/bin/perl

use strict;
use warnings;

# Pfad muss angepasst werden
my $dir = '/data/htdocs/moldb/molfiles';

# Pfad muss angepasst werden
my $command = 'C:\Programme\checkmol.exe -X ';

opendir DIR,$dir or die $!;
my @files = grep{/\.mol$/}readdir DIR;
closedir DIR;

for my $file(@files){
    my $return = qx{$command $file};
}

# hier muss noch die Konvertierung hin...
 

Neue Beiträge

Zurück