49589


python でlinux コマンドを起動させる際の質問が2つあります。  
2つめです。

subprocess モジュールのsubprocess.check_call()を用いる際に  
複数のコマンドをパイプで接続したり、リダイレクトしたり  
することはできますか?

実行したいことは、例えば

[code]

    nkf -wLu file1 > file2
    
[/code]

のようなことをsubprocess.check_call()で実現したいということです。  
今のところ、仕方ないので

[code]

    #! /usr/bin/sh
    nkf -wLu $1 > $2
    
[/code]

のようなシェルスクリプトsample.sh を作り、

[code]

    subprocess.check_call(['sample.sh', file1, file2])
    
[/code]

のような形で実現しています。  
とはいえ、もっとスマートな方法があればと思い、質問させていただきました。

環境  
OS: CentOS Linux release 7.5.1804 (Core)  
Python: Python 3.6.5


CC BY-SA 4.0
2018-10-23T13:38:39.967
49578
2018-10-26T12:53:13.547
2018-10-26T12:53:13.547
2238
question
python linux python3 centos
python でlinux コマンドを起動 — subprocessでパイプ、リダイレクトがある場合

[code]

    with open(file2, "w") as f:
        subprocess.check_call(['nkf', '-wLu', file1], stdout=f)
    
[/code]

なお、パイプで接続したい場合は、公式ドキュメント「subprocess ---
サブプロセス管理」のページの[「シェルのパイプラインを置き換える」](https://docs.python.org/ja/3.7/library/subprocess.html#replacing-
shell-pipeline)の項を参考にしてしてください。


CC BY-SA 4.0
2018-10-23T22:10:24.270
49589
2018-10-25T02:22:29.453
2018-10-25T02:22:29.453
15171
15171
49578
answer