2016-11-25 4 views
-1

私は現在、いくつかのRNAシーケンス(文字列)をUNIX実行可能ファイルにパイプするPythonスクリプトを作成しています。これらのファイルは、処理後に出力をPythonスクリプトに送って処理します。私はサブプロセスモジュールでこれをやっています。ターミナルコマンドラインから手動で入力せずに外部実行可能ファイルを実行できないのはなぜですか?

しかし、実行可能ファイルを実行するためには、さらにいくつかの引数が必要です。 subprocess.callメソッドを使用して、私が実行しようとしている:

import subprocess 

seq= "acgtgagtag" 
output= subprocess.Popen(["./DNAanalyzer", seq]) 

私の環境変数が正しく設定されたにも関わらず、実行ファイルはターミナルのコマンドラインから問題なく実行されている、およびサブプロセス・モジュールが正常に機能(たとえば、 subprocess.Popen([「LS」])だけで正常に動作)、同じ出力アウトのUnix実行可能なプリント:

Failed to open input file acgtgagtag.in 
Requesting input manually. 

あり、このパッケージでは、いくつかの他のUnix実行可能ファイルがあり、それらのすべてが同じように振る舞います。私は、シーケンスを含むシンプルなテキストファイルを作成して、Pythonスクリプトとコマンドラインの両方で入力として指定しようとしましたが、実行可能ファイルには手動入力のみが必要でした。

私はパッケージのマニュアルを見てきましたが、実行可能ファイルが表面的にしかコマンドラインで実行できない理由については言及していません。私はこのモジュール(そして一般的にはPython)の経験が限られているので、この問題に対する最善のアプローチが何であるかを誰でも指摘できますか?

+0

プログラムでも、現在の作業ディレクトリに関する考え方が異なるでしょうか?この仮説をテストするには、 'seq ="/some/dir/acgtgagtag "'に絶対ファイル名を使用します。また、エラーメッセージには、ファイルに ".in"という接尾辞が付いていることに注意してください。 – Jens

+0

端末からの './DNAanalyzer acgtgagtag'は同じエラーを出しますか?これは '。/ DNAanalyzer'を実行してから' acgtgagtag'を入力するのと同じではありません。あなたが文字列を与えている間、プログラムがファイル名を期待しているように思えます。 –

+0

@thatotherguy ./DNAanalyzerは、入力が手動で入力できるオプションを自動的に起動するので、端末から同じエラーを出すことはありません。いずれの場合でも、実行可能ファイルのマニュアルには、コマンドラインを文字列として返します。 –

答えて

1

Popen()は、実際にはオブジェクトのコンストラクタです。このオブジェクトは、実行可能ファイルを直接実行する「サブシェル」です。しかし、私は標準入力または出力(stdinstdout)を設定しなかったので、デフォルトではNoneになります。つまり、プロセスの入出力が両方とも閉じています。

subprocess.PIPEを渡して、私のプログラムとプロセスの間で入出力するパイプを入れたいと思っているPopenオブジェクトに渡してください。

さらに、(メインシェルの)スクリプトの環境変数はサブシェルの環境変数と同じではなく、これらの特定の実行可能ファイルは機能するために特定の環境変数を必要としました(このケースでは、パッケージ内のパラメータファイルへのパス)。これは、以下の方法で行った:

import subprocess as sb 

seq= "acgtgagtag" 
my_env= {BIOPACKAGEPATH: "/Users/Bobmcbobson/Documents/Biopackage/"} 

p= sb.Popen(['biopackage/bin/DNAanalyzer'], stdin=sb.PIPE, stdout=sb.PIPE, env=my_env) 
strb = (seq + '\n').encode('utf-8') 
data = p.communicate(input=strb) 

Popenオブジェクトを作成した後、我々はそれをcommunicate()を使用してフォーマットされた入力文字列を送信します。出力を読み取ることができ、スクリプトのどのような方法でも出力を処理できるようになりました。

関連する問題