私は現在、いくつかの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)の経験が限られているので、この問題に対する最善のアプローチが何であるかを誰でも指摘できますか?
プログラムでも、現在の作業ディレクトリに関する考え方が異なるでしょうか?この仮説をテストするには、 'seq ="/some/dir/acgtgagtag "'に絶対ファイル名を使用します。また、エラーメッセージには、ファイルに ".in"という接尾辞が付いていることに注意してください。 – Jens
端末からの './DNAanalyzer acgtgagtag'は同じエラーを出しますか?これは '。/ DNAanalyzer'を実行してから' acgtgagtag'を入力するのと同じではありません。あなたが文字列を与えている間、プログラムがファイル名を期待しているように思えます。 –
@thatotherguy ./DNAanalyzerは、入力が手動で入力できるオプションを自動的に起動するので、端末から同じエラーを出すことはありません。いずれの場合でも、実行可能ファイルのマニュアルには、コマンドラインを文字列として返します。 –