2012-05-08 6 views
0

Linux上のいくつかのコマンドはファイルを引数として受け取ります。 (cat、grep、sed、awk、...) StringIOオブジェクトを "file"引数として渡すにはどうすればよいですか? (私はそれをディスク上のファイルに書きたくないので、これらのコマンドに明示的に渡します) あるいは、他の種類の "メモリ内ファイル"オブジェクトが必要ですか?StringIOオブジェクトを "file"引数としてLinuxのコマンドラインに渡すことはできますか?

答えて

2

Create a pipeconnect the read endpreexec_fn内のプロセスには、デバイスファイルをコマンドに渡し、copy the StringIO contentsを書き込み側に渡します。

+0

もう少し詳しく「read endを接続する」を教えてください。ありがとうございます! – Locke

+0

'os.fdup2()'を使用して、パイプの読み込み側から既知のFDにFDをコピーするか、既存のFDの値をコマンドに渡します。 –

0

私はファイルの引数としてStringIOオブジェクトをどのようにパイプすることができますかと思います。

また、リストしたコマンドは、ファイルの引数としてstdoutからの入力を受け取ります。

など:

mypyscript.py | cat 

または

cat < mypyscript.py 

あなたがここでやっているのStringIOを書いているmypqscript.pyにstdoutに内容をオブジェクト

と仮定すると、FOはStringIOオブジェクトでありますあなたのスクリプト内のスクリプトの適切な場所に、内容を含めて:

sys.stdout.write(fo.getvalue()) 
    sys.stdout.flush() 
+0

'subprocess'の' std * '引数は、' subprocess'、 'None'、FD、または実FDに裏打ちされたファイルからの定数でなければなりません。 –

+0

@Mike Ramirez:実際のFDではなく、ごくわずかのLinuxコマンドで " - "を使うことができます。 – Locke

+1

@Locke:しかし、それらのほとんどは '/ dev/stdin'をとることができます。 –

関連する問題