Perlでユーザー入力を使用してローカルプログラムを実行する方法

ジョゼ・メイヤー

Perlで書かれたWebページからユーザー入力を取得してローカルプログラム(blastp)に送信し、結果を表示しようとしています。

これは私が今持っているものです:

(input code)

print $q->p, "Your database: $bd",
$q->p, "Your protein is: $prot",
$q->p, "Executing...";

print $q->p, system("blastp","-db $bd","-query $prot","-out results.out");

今、私は少し調査をしましたが、Perlでこのようなことをどのように行うべきかを完全に理解することはできません。ファイルを開いて書き込み、入力としてblastpに送信しようとしましたが、失敗しました。

参考までに、この行は正常な出力ファイルを生成します。

 kold@sazabi ~/BLAST/pataa $ blastp -db pataa -query ../teste.fs -out results.out

bdを絶対パスから強制的にロードする必要があるかもしれませんが、それは難しいことではありません。

編集:ええ、DBには環境変数がありますが、それは修正されています。必要なのは、入力をファイルに取得し、それをコマンドに渡してから、出力ファイルをCGIページに出力することだけです。

edit2:明確にするために:

$ protでユーザー入力を受け取っています。これを-queryでblastpに渡し、プログラムblastpを実行してから、results.outファイルをユーザーに出力します(またはblastp以降、このファイルへのリンクを用意します。 HTMLで出力できます)

編集:

了解しました。修正する必要があるすべてを修正しました。大きな問題は、何が問題になっているのかわからないことでした。Tiny:Captureをインストールしてstderrを印刷する必要がありました。これは、環境変数が正しく設定されていないことに気付いたため、BLASTがデータベースを見つけられなかったためです。すべての助けをありがとう!

DVK
  1. $protファイルに書き込みます。テキストを分割するためにテキストを処理せずに、そのまま実行する必要があると仮定します。

    • 固定ファイル名の場合(問題がある可能性があります):

      use File::Slurp;
      write_file("../teste.fs", $prot, "\n") or print_error_to_web(); 
            # Implement the latter to print error in nice HTML format
      
    • 一時ファイルの場合(より良い):

      my ($fh, $filename) = tempfile( $template, DIR => "..", CLEANUP => 1);
      # You can also create temp directory which is even better, via tempdir()
      print $fh "$prot\n";
      close $fh;
      
  2. ステップ2:指示どおりにコマンドを実行します。

    my $rc = system("$BLASTP_PATH/blastp", "-db", "pataa"
                    ,"-query", "../teste.fs", "-out", "results.out");
    # Process $rc for errors
    # Use qx[] instead of system() if you want to capture 
    #      standard output of the command
    
  3. ステップ3:出力ファイルを次の場所で読み取ります。

    use File::Slurp;
    my $out_file_text = read_file("results.out");
    
  4. Webサーバーに送り返す

    print $q->p, $out_file_text;
    

上記のコードには複数の問題があります(たとえば、より良いファイル/ディレクトリパス、より多くのエラー処理などが必要です...)が、正しい方向に進む必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ユーザーがnを入力してプログラムを終了するまで、プログラムを実行し続けたいですか?

分類Dev

ユーザー入力が終了するまでプログラムを実行し続けます

分類Dev

ユーザー入力を使用してプログラムを開く方法

分類Dev

ユーザー入力を使用してプログラムを開く方法

分類Dev

Javaユーザーがコマンドプロンプトに入力を入力するまでプログラムの実行を停止します

分類Dev

Cプログラムでスペースバーを押している間にユーザー入力を実行する

分類Dev

ユーザーが単語を入力するまで実行を続けるプログラム

分類Dev

ユーザーが正しいユーザー名とパスワードを入力するまでプログラムをループさせる方法

分類Dev

Qt-ユーザー入力を待つためにプログラムの実行を一時停止する正しい方法は何ですか?

分類Dev

ユーザー入力を待つか、定義された間隔で実行するプログラム?

分類Dev

luaの引数としてユーザー入力なしでluaの外部プログラムを実行する

分類Dev

プログラムを再実行するか終了するためにユーザー入力を要求する

分類Dev

Haskellでユーザー入力を使って小さなプログラムをテストする方法

分類Dev

プログラムC#、Windowsを実行しているユーザーではなく、ログインしているユーザーを取得する

分類Dev

異なるユーザーのアカウントでプログラムを実行する方法

分類Dev

iOSPDFKitを使用してPDFフォームフィールドにプログラムで入力する方法

分類Dev

表示ダイアログでテキストフォームを使用してユーザー入力を取得する方法をフラッターしますか?

分類Dev

EmacsやNanoのようなプログラムは、ユーザーがEnterキーを押さなくても、ターミナルで実行中にユーザー入力を取得するにはどうすればよいですか?

分類Dev

ターミナルを使用せずにrootユーザーとしてプログラムを実行する方法

分類Dev

ACプログラムを使用して、ユーザーがLinuxに存在するコマンドを入力したかどうかを判断する方法

分類Dev

sbtでscalaプログラムを実行するときにユーザー入力を求めるプロンプト

分類Dev

プログラムを実行するためにユーザーにパスワードの入力を要求する最もクリーンな方法は?

分類Dev

ユーザー入力でPythonプログラムを終了する

分類Dev

scanf()を実行し、ユーザーからの入力を受け取った後、Cプログラムはエラーなしで終了します。

分類Dev

ユーザーが空白行を入力したときにACプログラムを終了する

分類Dev

外部プログラム/スクリプトを実行し、ユーザー入力を要求するかどうかを検出します

分類Dev

read() syscall を使用してユーザー入力をプログラムにスクリプト化する方法は?

分類Dev

Pythonプログラム、ファイル実行時にコンソール入力を使用する方法は?

分類Dev

ユーザー入力に反応するようにC#でプログラムを取得する方法

Related 関連記事

  1. 1

    ユーザーがnを入力してプログラムを終了するまで、プログラムを実行し続けたいですか?

  2. 2

    ユーザー入力が終了するまでプログラムを実行し続けます

  3. 3

    ユーザー入力を使用してプログラムを開く方法

  4. 4

    ユーザー入力を使用してプログラムを開く方法

  5. 5

    Javaユーザーがコマンドプロンプトに入力を入力するまでプログラムの実行を停止します

  6. 6

    Cプログラムでスペースバーを押している間にユーザー入力を実行する

  7. 7

    ユーザーが単語を入力するまで実行を続けるプログラム

  8. 8

    ユーザーが正しいユーザー名とパスワードを入力するまでプログラムをループさせる方法

  9. 9

    Qt-ユーザー入力を待つためにプログラムの実行を一時停止する正しい方法は何ですか?

  10. 10

    ユーザー入力を待つか、定義された間隔で実行するプログラム?

  11. 11

    luaの引数としてユーザー入力なしでluaの外部プログラムを実行する

  12. 12

    プログラムを再実行するか終了するためにユーザー入力を要求する

  13. 13

    Haskellでユーザー入力を使って小さなプログラムをテストする方法

  14. 14

    プログラムC#、Windowsを実行しているユーザーではなく、ログインしているユーザーを取得する

  15. 15

    異なるユーザーのアカウントでプログラムを実行する方法

  16. 16

    iOSPDFKitを使用してPDFフォームフィールドにプログラムで入力する方法

  17. 17

    表示ダイアログでテキストフォームを使用してユーザー入力を取得する方法をフラッターしますか?

  18. 18

    EmacsやNanoのようなプログラムは、ユーザーがEnterキーを押さなくても、ターミナルで実行中にユーザー入力を取得するにはどうすればよいですか?

  19. 19

    ターミナルを使用せずにrootユーザーとしてプログラムを実行する方法

  20. 20

    ACプログラムを使用して、ユーザーがLinuxに存在するコマンドを入力したかどうかを判断する方法

  21. 21

    sbtでscalaプログラムを実行するときにユーザー入力を求めるプロンプト

  22. 22

    プログラムを実行するためにユーザーにパスワードの入力を要求する最もクリーンな方法は?

  23. 23

    ユーザー入力でPythonプログラムを終了する

  24. 24

    scanf()を実行し、ユーザーからの入力を受け取った後、Cプログラムはエラーなしで終了します。

  25. 25

    ユーザーが空白行を入力したときにACプログラムを終了する

  26. 26

    外部プログラム/スクリプトを実行し、ユーザー入力を要求するかどうかを検出します

  27. 27

    read() syscall を使用してユーザー入力をプログラムにスクリプト化する方法は?

  28. 28

    Pythonプログラム、ファイル実行時にコンソール入力を使用する方法は?

  29. 29

    ユーザー入力に反応するようにC#でプログラムを取得する方法

ホットタグ

アーカイブ