<Python> subprocess.check_outputは古いらしい。。。

pythonさんから、うにっくすこまんどunix commandを呼び出すモジュールsubprocess.check_outputはもう古いらしい。

マニュアル

17.5. subprocess — サブプロセス管理 — Python 3.5.1 ドキュメント

今は、subprocess.Popen()らしい。

エラー処理とあわせた記述例(16/3/19 ちと修正)、、、

env = os.environ.copy()
env['PATH'] = '{}:{}'.format('/home/hage', env['PATH'])
cmd = "ps -a | sed '/ /,/g'"
p = subprocess.Popen(cmd, shell=True, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
stdout, stderr = p.communicate()
if stderr == '':
    if stdout == '':
        print('Nothing returned', file=sys.stderr)
        sys.exit(2)
    elif stdout == '\n':
        print('Nothing returned except \\n', file=sys.stderr)
        sys.exit(2)
    else:
        df = pd.read_csv(io.StringIO(stdout))
else:
    print('{}'.format(stderr), file=sys.stderr)
    sys.exit(2)

にゃるほどね。。。

あと、print標準エラー出力stdoutに出す方法。

print('hage', file=sys.stderr)

Stack overflow

stackoverflow.com

16/3/19追加

自分で作ったコマンドとかは、環境変数environment variablesでパスを渡してあげないと、フルパスfull path渡すことになる。

渡すには、

subprocess(env={'PATH': '/home/hage'})