2011-12-23 8 views
1

Linux用の小さな社内Pythonスクリプトを使用して、ユーザーの$ HOMEディレクトリに/home/user/environ_script.shファイルを作成して読み込みますメモリ内のファイルハンドルを作成してPythonの外部コマンドに渡す方法

subprocess.call('bash --rcfile /home/user/environ_script.sh')

を経由して自分の殻に環境スクリプトが正常に動作しますまだ、これはまったくのディスクに書き込むことなく行うことができる場合、私は不思議でしたか? fooはファイルハンドルを期待するので、どのようにbashのの プロセス置換コマンド

foo <(command)

と同様に、一時的なファイルハンドルの/ dev/FDX経由fooの入力として、「コマンド」の出力を提供します。

+0

[tempfile](http://docs.python.org/library/tempfile.html)モジュールをチェックしますか? – wim

+0

hmm .. read tempfile.SpooledTemporaryFile().. – joshbaptiste

+0

関連:http://stackoverflow.com/q/8467588/ – jfs

答えて

1

私は何を探していることはnamed pipeで、それは、ファイルとして使用することができ、それがディスクに書き込まれていないプロセス間通信のためのメカニズムであることを考える:中

import subprocess 
import os 

fifo_name = 'my-bash.rc' 
os.mkfifo(fifo_name) 

try: 
    process = subprocess.Popen(['bash', '--rcfile', fifo_name]) 
    with open(fifo_name, 'w') as f: 
     f.write('echo "This is my-bash.rc"') 
    process.wait() 
finally: 
    os.remove(fifo_name) 

上記の例では、名前付きパイプが作成され、サブプロセスに渡されて読み取り用に開きます。 Python側では、同じパイプが書き込みのために開かれ、いくつかの内容が書き込まれ、パイプが閉じられます。サブプロセスはパイプの内容を受け取り、その内容が実際のファイルから読み込まれたかのように処理を続けます。

+0

これは "bash --rcfile"がstdinから読み込むことができるが、ファイルハンドルだけを受け入れる場合にはうまくいく。 – joshbaptiste

+0

私は今あなたの要件を理解していると私はそれに応じて私の応答を更新したと思います。 – jcollado

+0

ああすばらしい、名前付きパイプを忘れていました..このソリューションはうまく動作します、ありがとう! – joshbaptiste

関連する問題